不多说,上代码:
这是最外层的一个bean
public class TestJsonVo<T> 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<TestJsonListObj> list;
public List<TestJsonListObj> getList() {
return list;
}
public void setList(List<TestJsonListObj> 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<TestJsonTemp> testJson = new TestJsonVo<TestJsonTemp>();
TestJsonTemp data = new TestJsonTemp();
ArrayList<TestJsonListObj> list = new ArrayList<TestJsonListObj>();
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<TestJsonTemp> 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<TestJsonTemp> parseObject = JSON.parseObject(json,
new TypeReference<TestJsonVo<TestJsonTemp>>() {
}.getType());
System.out.println(parseObject.toString());
System.out.println(parseObject.getData().toString());
我换Gson试了一下,可以了
public static void main(String[] args) {
TestJsonVo<TestJsonTemp> testJson = new TestJsonVo<TestJsonTemp>();
TestJsonTemp data = new TestJsonTemp();
ArrayList<TestJsonListObj> list = new ArrayList<TestJsonListObj>();
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<TestJsonTemp> fromJson = gson.fromJson(json, new TypeToken<TestJsonVo<TestJsonTemp>>(){}.getType());
System.out.println(fromJson);
}
输出:{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}}
TestJsonVo [data=TestJsonTemp [list=[TestJsonListObj [test1=111111111111, test2=111111111111]]]]