不多说,上代码:
这是最外层的一个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]]]]