今天写一个东西,用HttpPost到服务器端获取json数据,然后客户端用Gson解析显示,就是这么一个东西,居然还出错了。
和大部分人一样,在客户端定义一个JsonEntity实体类,我很快就就把data字段定义成为一个String类型的了。然后解析的时候悲剧了,
搞了半天,把所有的json数据打印在控制台一一对应,突然,我勒个去,返回的json数据是这样的 "data":[{xxx:xxx}] 看清了哦,后面没有双引号,不是String类型啊,是一个数组类型。
怎么办,改了哦。把String类型改为Object类型,再把它Gson.toJson(data),再用Gson.fromJson(data)就可以转为你想要的实体类型了哦。
JsonEntity实体类
- import java.io.Serializable;
- import java.util.List;
- import com.zgan.jsondata.weather;
- public class JsonEntity implements Serializable{
- private static final long serialVersionUID = 1L;
- private int status;
- private String msg;
- private Object data;
- private int total;
- public Object getData() {
- return data;
- }
- public void setData(Object data) {
- this.data = data;
- }
- public int getStatus() {
- return status;
- }
- public void setStatus(int status) {
- this.status = status;
- }
- public String getMsg() {
- return msg;
- }
- public void setMsg(String msg) {
- this.msg = msg;
- }
- public int getTotal() {
- return total;
- }
- public void setTotal(int total) {
- this.total = total;
- }
- public static long getSerialversionuid() {
- return serialVersionUID;
- }
- @Override
- public String toString() {
- return "JsonEntity [status=" + status + ", data=" + data + ", msg="
- + msg + ", total=" + total + "]";
- }
- }
中间多一次转化程序:
- public static Object getData(JsonEntity jsonEntity,Type type)
- {
- String jstr=GsonUtil.getGson().toJson(jsonEntity.getData());
- return AppConstants.gson.fromJson(jstr,type);
- }
最后可以和原来一样的取用了:
- list=(List<weather>) GsonUtil.getData(jsonEntity,AppConstants.type_weatherList);