转载请出自出处:http://eksliang.iteye.com/blog/2261478
一、问题
默认会将Object接收的数字转换为double,例如int类型12转换后会变成12.0,解决方案,自定义转换器
二、需要反序列化的实体如下
public class User { private String userName; private String userPwd; private List<Object> lists; // get()跟set()省略......! }
三、JsonDeserializer转换器代码如下
package com.gosun.gson; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; /** * json转为对象时调用 * @author Ickes */ public class ListDeserialize implements JsonDeserializer<List<Object>>{ /** * <pre> * 默认会将Object接收的数字转换为double * 问题: * int类型12转换后会变成12.0,自定义转换的目的就是将他转换为12 * </pre> */ public List<Object> deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { //得到数组里面的所有值 Iterator<JsonElement> iterator= json.getAsJsonArray().iterator(); List<Object> list = new ArrayList<Object>(); while (iterator.hasNext()) { JsonElement element = iterator.next(); if(isInteger(element.getAsString())){ list.add(element.getAsInt()); continue; } list.add(element); } return list; } /** * 判断是不是int类型的数字 * @param str * @return * 是int类型返回true */ public boolean isInteger(String str) { Pattern pattern = Pattern.compile("[0-9]+"); Matcher isNum = pattern.matcher(str); if (!isNum.matches()) { return false; } return true; } }
四、测试代码如下
package com.gosun.gson; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; /** * json转为对象时调用 * @author Ickes */ public class ListDeserialize implements JsonDeserializer<List<Object>>{ /** * <pre> * 默认会将Object接收的数字转换为double * 问题: * int类型12转换后会变成12.0,自定义转换的目的就是将他转换为12 * </pre> */ public List<Object> deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { //得到数组里面的所有值 Iterator<JsonElement> iterator= json.getAsJsonArray().iterator(); List<Object> list = new ArrayList<Object>(); while (iterator.hasNext()) { JsonElement element = iterator.next(); if(isInteger(element.getAsString())){ list.add(element.getAsInt()); continue; } list.add(element); } return list; } /** * 判断是不是int类型的数字 * @param str * @return * 是int类型返回true */ public boolean isInteger(String str) { Pattern pattern = Pattern.compile("[0-9]+"); Matcher isNum = pattern.matcher(str); if (!isNum.matches()) { return false; } return true; } }
执行结果如下
#从打印信息可以看出数字12反序列化后变成了12.0 User [userName=ickes, userPwd=12345, lists=[java, 12.0, 12.2]] #使用了转换器后变成了12 User [userName=ickes, userPwd=12345, lists=["java", 12, 12.2]]
相关推荐
gson资源包,用于生产json报文已经解析json报文,方法比较全
slf4j-log4j12-1.6.1+slf4j-api-1.6.1.jar
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。
android gosn 使用实例代码,欢迎下载。其中包含关于josn时间格式转换的代码类还有gosn 反序列话datatime代码
使用Volley框架GET从网络上获取数据
资源包括select2.js 和select2.css 以及把jave对象转为josn的jar包:gosn.jar
最新的gson架包,Gson是一个Java类库,用于将Java对象转换为它们所代表的JSON数据,也可以用于将一个JSON字符串转换为对应的Java对象。 Gson的目标为: 1) 提供像toString()和构造方法(工厂方法)一样简单使用的...
Gson工具类JsonUtils 将java对象装换为json,支持泛型和任意类型
HiJson是一款右Java开发的基于gson包,用于格式化json字符,以树的形式展示,方便json字符串查看,支持各种常用操作,支持多标签!
android之json和gson数据解析最完整的代码例子(包括各种样式的json数据) 本人在2.3.3模拟器上已亲测可以运行。最适合学习json 或gson数据解析的初学者。
Gson解析网络数据显示到listview上,加入万能适配器,适配器就10行,大家可以复制包用,在log日记查看完整的Json数据,listview上我显示了title给大家看效果,适配器只要10行左右,简单易懂。
网络上有很多Json解析库,这里我使用Gson来解析Json,Gson有个特点,就是要将数据的键作为变量封装到一个个实体中,如果值为数组的,变量的类型还必须是集合,然后通过Gson.fromJson来传入数据和实体类,再通过实体...
可以解决implementation 'com.squareup.retrofit2:converter-gosn:2.5.0' 依赖失败的问题
gson和mysql的jar包,JavaWeb开发必备资源
json包、gson包以及相应的源码,其中包括了json的工具类-json.jar以及gson的工具类-gson.jar,以及json-sources 和gson-sources。
使用迭代器以及gson和jsonobject解析json数据
天气预报解析,json,网络解析模块,框架模块,请大家下载。
比GOSN快10倍 手打Demo jackson-all-1.9.11 使用方便
Android天气预报的制作,其中用到了okhttp访问网络以及用到Gosn解析json数据。
遵循Material Design设计规范DrawerLayout,NavigationView,ToolBar,Fragment,CardView实现主要UI布局使用开源库okhttp3请求网络数据,天气API接口为和风天气提供使用Gosn解析获取天气数据使用高德地图API定位...