转载请出自出处: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]]
相关推荐
gosn的资源包是针对Java开发者的工具,主要用于处理JSON数据。JSON(JavaScript Object Notation)是一种轻量级的...无论是简单的对象转换,还是复杂的序列化和反序列化需求,Gson都能提供高效且易于使用的解决方案。
这两个组件在Java开发中广泛用于日志记录,它们是SLF4J(Simple Logging Facade for Java)框架的一部分,而SLF4J是一个为各种日志框架提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置他们希望的日志...
在实际项目中,你可以直接使用`gosn`库的`toJson`方法将Java对象转换为JSON字符串,然后通过`fromJson`方法将JSON字符串还原为相应的Java对象。 总之,`gosn`是Android开发者处理JSON数据的一个强大工具,特别是在...
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。
在Java应用中,`gosn.jar`可以帮助开发者快速地在Java对象和JSON之间进行转换,便于数据传输或存储。 **标签解析:** 标签"select2.js"、"gosn"、"select2.css"和"select2"分别对应了Select2库的JavaScript文件、...
`ErrorListener`接口中的`onErrorResponse`方法会在请求失败时被调用,我们可以在这里处理各种错误情况。 总结,Volley通过其高效、易用的特性,简化了Android应用的网络编程。通过创建GET请求、利用缓存策略以及...
在Java开发中,数据交换和序列化经常使用JSON(JavaScript Object Notation)格式,而Gson库是由Google提供的一个强大的库,用于在Java对象和JSON数据之间进行映射。JsonUtils是一个基于Gson的工具类,它扩展了Gson...
本文将详细介绍如何在Android应用中使用JSON和Gson进行数据解析,并通过实际代码示例来演示各种类型的JSON数据处理。 一、JSON基础 1. JSON格式:JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式...
最新的gson架包,Gson是一个Java类库,用于将Java对象转换为它们所代表的JSON数据,也可以用于将一个JSON字符串转换为对应的Java对象。 Gson的目标为: 1) 提供像toString()和构造方法(工厂方法)一样简单使用的...
Gson支持将JSON数组转换为Java集合,如List、Set等,也可以将Java集合转换为JSON数组。 **三、Gson与其他库的比较** 1. **Jackson vs Gson** Jackson是一个功能更全面的库,提供了更多的性能优化和灵活性,如...
用户可以直接在软件中修改JSON数据,然后保存或导出为新的JSON文件。 4. **便捷性**:HiJson作为一个独立的exe文件,无需安装即可运行,这意味着用户可以在任何装有Java运行环境的计算机上使用它,无论是在开发环境...
这一功能在处理Web应用中的前后端数据交换、配置文件的读写以及日志记录等场景中显得尤为重要。 Gson库的设计哲学是简洁、高效和易用。它无需额外的配置文件或注解,只需通过简单的代码调用即可完成Java对象和JSON...
反过来,客户端也可以将Java对象转换为JSON发送给服务器。通过查看源代码,我们可以深入了解这些库如何处理JSON数据,以及如何优化性能和内存使用。 总的来说,这些工具和库对于Java开发者来说是非常重要的资源,...
使用Google Gson解析Json数据时需要使用的 gson-2.5.jar,最新版本
Gson解析网络数据显示到listview上,加入万能适配器,适配器就10行,大家可以复制包用,在log日记查看完整的Json数据,listview上我显示了title给大家看效果,适配器只要10行左右,简单易懂。
网络上有很多Json解析库,这里我使用Gson来解析Json,Gson有个特点,就是要将数据的键作为变量封装到一个个实体中,如果值为数组的,变量的类型还必须是集合,然后通过Gson.fromJson来传入数据和实体类,再通过实体...
其次,**Gson库解析**是由Google提供的,它能将Java对象转换为它们对应的JSON表示,反之亦然。使用Gson,解析JSON变得非常直观,特别是当你已经有了与JSON结构匹配的Java对象模型。以下是一个使用Gson解析JSON的例子...
可以解决implementation 'com.squareup.retrofit2:converter-gosn:2.5.0' 依赖失败的问题
标题中的“天气预报json解析”指的是在编程领域中,如何处理和解析来自网络的天气预报数据,这些数据通常以JSON(JavaScript Object Notation)格式提供。JSON是一种轻量级的数据交换格式,因其易于人阅读和编写,...
gson和mysql的jar包,JavaWeb开发必备资源