android json 解析,android json解析 泛型

不多说,上代码:

这是最外层的一个bean

public class TestJsonVo implements Serializable {

private T data;

public T getData() {

return data;

}

public void setData(T data) {

this.data = data;

}

@Override

public String toString() {

return "TestJsonVo [data=" + data + "]";

}

}

public class TestJsonTemp {

private List list;

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

@Override

public String toString() {

return "TestJsonTemp [list=" + list + "]";

}

}

public class TestJsonListObj {

private String test1;

private String test2;

public String getTest1() {

return test1;

}

public void setTest1(String test1) {

this.test1 = test1;

}

public String getTest2() {

return test2;

}

public void setTest2(String test2) {

this.test2 = test2;

}

@Override

public String toString() {

return "TestJsonListObj [test1=" + test1 + ", test2=" + test2 + "]";

}

}

public static void main(String[] args) {

TestJsonVo testJson = new TestJsonVo();

TestJsonTemp data = new TestJsonTemp();

ArrayList list = new ArrayList();

TestJsonListObj e = new TestJsonListObj();

e.setTest1("111111111111");

e.setTest2("111111111111");

list.add(e);

data.setList(list);

testJson.setData(data);

String json = JSON.toJSONString(testJson);

System.out.println(json);

打印结果:{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}} 没问题

然后再把{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}}转为Object:

TestJsonVo obj= JSON.parseObject(json, TestJsonVo.class);

System.out.println(obj);

结果为:TestJsonVo [data={"list":[{"test1":"111111111111","test2":"111111111111"}]}]  很明显data对象根本没转过来 ,而且obj.getData().getList() 会报java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to testFastjson.TestJsonTemp

后来用TypeReference试了一下 再java下没问题,但是放到Android上的时候还是报java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to testFastjson.TestJsonTemp:

TestJsonVo parseObject = JSON.parseObject(json,

new TypeReference>() {

}.getType());

System.out.println(parseObject.toString());

System.out.println(parseObject.getData().toString());

我换Gson试了一下,可以了

public static void main(String[] args) {

TestJsonVo testJson = new TestJsonVo();

TestJsonTemp data = new TestJsonTemp();

ArrayList list = new ArrayList();

TestJsonListObj e = new TestJsonListObj();

e.setTest1("111111111111");

e.setTest2("111111111111");

list.add(e);

data.setList(list);

testJson.setData(data);

Gson gson = new Gson();

String json = gson.toJson(testJson);

System.out.println(json);

TestJsonVo fromJson = gson.fromJson(json, new TypeToken>(){}.getType());

System.out.println(fromJson);

}

输出:{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}}

TestJsonVo [data=TestJsonTemp [list=[TestJsonListObj [test1=111111111111, test2=111111111111]]]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值