不多说,上代码:
这是最外层的一个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]]]]
相关推荐
Android_JSON数据解析 博客里面的Demo
gson 解析泛型和将泛型转为json字符串
Android Json 解析demo 建立,基于Android stdio
android json 解析jar包。没有积分可以取GitHub上下载
android 项目开发实例,json 解析参考, 希望对你们有用
自己写的json解析,不使用第三方的jar包,简单易懂,分为本地json解析和online json解析,网上的只需要修改一下url地址即可
android json解析demo,简单粗暴
Unity5json解析工具,支持android/ios泛型列表参数正反序列化,unity5.x工程导入即可用
android框架解析JSON数据放入ListView的例子
eclipse项目。获取raw文件下的json文件。无需编写json数据里面key值的实体类,动态获取里面的键值对的值。并在列表显示
Android json解析jar包,挺方便的解析jar包。
Android JSON解析
AndroidJSON解析框架GSON,可以方便的解析JSON,提高效率,欢迎大家下载使用。
Android JSON解析示例代码.txt
android JSon解析例子,希望可以帮助大家。
android json数据下载与解析demo,实现了http下载json服务器数据,并通过JsonObject解析json数据
通过编写配置文件,该代码生成器能自动生成相应的bean,和解析json的代码。 你需要做的是,有一个ruby环境,将配置文件写在test.conf中,然后shell的重定向即可。 如生成Bean文件: ruby BeanGen.rb > Bean.java 生成...
老罗android 解析json数据源码
C# 工具类 泛型转JSON 使用 Newtonsoft.Json 转换JSON
android json 解析 json数据格式解析我自己分为两种; 一种是普通的,一种是带有数组形式的;