使用Gson解析Json数组遇到的泛型类型擦除问题解决方法
来源:互联网 发布:高级java工程师委培班 编辑:程序博客网 时间:2024/04/27 18:09
谷歌Gson转换Json串有如下方法:
public Object fromJson(String json, Type typeOfT);
可以使用它进行数组解析。如下,使用此方法解析Json串为类型MyBean的List数组,方法可用。
List<MyBean> lst = new Gson().fromJson(data, new TypeToken<List<MyBean>>(){}.getType());
但如果把MyBean改为泛型T,封装此方法为如下:
List<T> lst = new Gson().fromJson(data, new TypeToken<List<T>>(){}.getType());public static <T> List<T> parseJson2List(String data, Class<T> clazz){try {return new Gson().fromJson(data, new TypeToken<List<T>>(){}.getType());} catch(Throwable e){e.printStackTrace();return null;}}
例,实例化泛型为Test
class Test {private String id;private String name;private String value;}
调用封装方法如下:
List<Test> lst = parseJson2List(new String("[{id:'myid',name:'myname',value:'myvaule'},{id:'myid',name:'myname',value:'myvaule'}]"), Test.class);
调试结果如下图,数组对象为LinkedTreeMap类型,并不是预期的Test类型。
原因:泛型在编译期类型擦除导致,类型擦除可见如下链接:
http://stackoverflow.com/questions/20773850/gson-typetoken-with-dynamic-arraylist-item-type
http://blog.csdn.net/gstormspire/article/details/7638638
解决方法:
- public static <T> List<T> fromJsonArray(String json, Class<T> clazz) throws Exception {
- List<T> lst = new ArrayList<T>();
- JsonArray array = new JsonParser().parse(json).getAsJsonArray();
- for(final JsonElement elem : array){
- lst.add(new Gson().fromJson(elem, clazz));
- }
- return lst;
- }
1 0
- 使用Gson解析Json数组遇到的泛型类型擦除问题解决方法
- Gson 解析Json结构,泛型转为List 集合会出现擦除数据的情况
- 使用Gson和FastJson解析JSON数据遇到的问题
- Gson解析Json的方法 泛型解决方案
- 用Gson解析纯json数组的方法总结
- 使用Gson解析Json得到各种类型的数据
- 使用Gson解析json到任意类型的Bean
- Gson解析json数据遇到的问题。
- Gson和泛型擦除的解决方法
- Gson 解析json的使用
- JSON解析 Gson的使用
- 关于数组类型的json解析方法
- 使用Gson解析json 数组转对象
- 使用Gson解析泛型类型
- Gson解析json数组
- Gson解析json数组
- gson解析json数组
- Gson解析json数组
- WMWARE + UBUNTU 13.10 PING主机问题
- SqlHelper For Sqlserver 一个简单实用的数据库访问帮助类
- 关于var、作用域
- JS学习笔记上
- Zend 哈希表的内部实现
- 使用Gson解析Json数组遇到的泛型类型擦除问题解决方法
- HTML5将重新定义移动互联,一个全新的黄金时代就要到来!
- Binary Tree Maximum Path Sum (Java)
- C字符串的小问题
- PHP哈希表结构的深入剖析
- How to migrate data from another Mac using Mountain Lion and earlier
- Python-if语句
- 2015-2-6-工作日志-刘婉
- java--多态