Gson转换json串到Map,Key值是String还是设定值(如Long)?
2016-04-07 11:06
483 查看
开发中遇到一个小问题,常用的json String转换为java对象的写法如下:
Gson gson = new Gson();
PublicServiceResponse<Map<Long, List<ActivityAPIBO>>> res = new PublicServiceResponse<Map<Long, List<ActivityAPIBO>>>();
resMap = gson.fromJson(jsonString, res.class)
当拿到resMap是使用Long类型的ID作为key去取得结果为空,经调试发现使用String类型的ID取值时可以正确返回。
也就是说转换时虽然指定的了Map的Key为Long类型,Gson还是默认解析为String类型的。
测试了fastJson结果相同。
Gson的解决办法,引入新的类TypeToken:
http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/reflect/TypeToken.html
TypeToken<PublicResp<Map<Long, List<JavaBean>>>> type = new TypeToken<PublicResp<Map<Long, List<JavaBean>>>>(){};
res = gson.fromJson(html, type.getType());
此时,Key为Long型了。
Gson gson = new Gson();
PublicServiceResponse<Map<Long, List<ActivityAPIBO>>> res = new PublicServiceResponse<Map<Long, List<ActivityAPIBO>>>();
resMap = gson.fromJson(jsonString, res.class)
当拿到resMap是使用Long类型的ID作为key去取得结果为空,经调试发现使用String类型的ID取值时可以正确返回。
也就是说转换时虽然指定的了Map的Key为Long类型,Gson还是默认解析为String类型的。
测试了fastJson结果相同。
Gson的解决办法,引入新的类TypeToken:
http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/reflect/TypeToken.html
TypeToken<PublicResp<Map<Long, List<JavaBean>>>> type = new TypeToken<PublicResp<Map<Long, List<JavaBean>>>>(){};
res = gson.fromJson(html, type.getType());
此时,Key为Long型了。
相关文章推荐
- js长轮询与短轮询的简单理解
- Shiro学习(9)JSP标签
- scrapy处理JSON API
- javascript:localStorage的兼容性实现
- JS对JSON的操作总结
- javascript:跨域
- javascript:类的介绍
- javascript:算法笔记
- js 判断一个json里是不是包含某个key
- javascript中的一些常用的数组算法总结
- javascript Array数组常用方法学习与总结
- WEB开发者必备的7个JavaScript函数
- javascript中创建对象的方式总结
- javascript Array学习与使用
- extjs panel add 和remove panel的注意事项
- js 对象属性复制到另一个对象
- jsp页面进度条加载
- 详解Javascript中的Url编码/解码
- ajaxFileUpload返回的json数据带<pre>标签,导致无法执行success后面的代码
- JS日期,JS获取当前日期时间,js日期格式化