`
eksliang
  • 浏览: 598854 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Gosn解决在集合中int自动转换为duble类型

阅读更多

转载请出自出处: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]]

 

分享到:
评论
1 楼 h140465 2018-03-19  
兄弟,测试代码呢

相关推荐

    gosn的资源包

    gosn的资源包是针对Java开发者的工具,主要用于处理JSON数据。JSON(JavaScript Object Notation)是一种轻量级的...无论是简单的对象转换,还是复杂的序列化和反序列化需求,Gson都能提供高效且易于使用的解决方案。

    gosn 工具包

    这两个组件在Java开发中广泛用于日志记录,它们是SLF4J(Simple Logging Facade for Java)框架的一部分,而SLF4J是一个为各种日志框架提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置他们希望的日志...

    android gosn 使用示例

    在实际项目中,你可以直接使用`gosn`库的`toJson`方法将Java对象转换为JSON字符串,然后通过`fromJson`方法将JSON字符串还原为相应的Java对象。 总之,`gosn`是Android开发者处理JSON数据的一个强大工具,特别是在...

    gosn .jar下载

    Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。

    select2的css和js,gosn.jar

    在Java应用中,`gosn.jar`可以帮助开发者快速地在Java对象和JSON之间进行转换,便于数据传输或存储。 **标签解析:** 标签"select2.js"、"gosn"、"select2.css"和"select2"分别对应了Select2库的JavaScript文件、...

    使用Volley框架GET从网络上获取数据

    `ErrorListener`接口中的`onErrorResponse`方法会在请求失败时被调用,我们可以在这里处理各种错误情况。 总结,Volley通过其高效、易用的特性,简化了Android应用的网络编程。通过创建GET请求、利用缓存策略以及...

    Gson工具类JsonUtils

    在Java开发中,数据交换和序列化经常使用JSON(JavaScript Object Notation)格式,而Gson库是由Google提供的一个强大的库,用于在Java对象和JSON数据之间进行映射。JsonUtils是一个基于Gson的工具类,它扩展了Gson...

    android之json和gson数据解析最完整的代码例子(包括各种样式的json数据)

    本文将详细介绍如何在Android应用中使用JSON和Gson进行数据解析,并通过实际代码示例来演示各种类型的JSON数据处理。 一、JSON基础 1. JSON格式:JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式...

    gson-2.7.jar

    最新的gson架包,Gson是一个Java类库,用于将Java对象转换为它们所代表的JSON数据,也可以用于将一个JSON字符串转换为对应的Java对象。 Gson的目标为: 1) 提供像toString()和构造方法(工厂方法)一样简单使用的...

    gson jar包下载

    Gson支持将JSON数组转换为Java集合,如List、Set等,也可以将Java集合转换为JSON数组。 **三、Gson与其他库的比较** 1. **Jackson vs Gson** Jackson是一个功能更全面的库,提供了更多的性能优化和灵活性,如...

    查看json格式的一款软件

    用户可以直接在软件中修改JSON数据,然后保存或导出为新的JSON文件。 4. **便捷性**:HiJson作为一个独立的exe文件,无需安装即可运行,这意味着用户可以在任何装有Java运行环境的计算机上使用它,无论是在开发环境...

    gson各个版本 jar 包下载

    这一功能在处理Web应用中的前后端数据交换、配置文件的读写以及日志记录等场景中显得尤为重要。 Gson库的设计哲学是简洁、高效和易用。它无需额外的配置文件或注解,只需通过简单的代码调用即可完成Java对象和JSON...

    json包、gson包以及相应的源码

    反过来,客户端也可以将Java对象转换为JSON发送给服务器。通过查看源代码,我们可以深入了解这些库如何处理JSON数据,以及如何优化性能和内存使用。 总的来说,这些工具和库对于Java开发者来说是非常重要的资源,...

    gson-2.5.jar

    使用Google Gson解析Json数据时需要使用的 gson-2.5.jar,最新版本

    Gson解析网络数据显示到listview上,加入万能适配器,适配器就10行,大家可以复制包用

    Gson解析网络数据显示到listview上,加入万能适配器,适配器就10行,大家可以复制包用,在log日记查看完整的Json数据,listview上我显示了title给大家看效果,适配器只要10行左右,简单易懂。

    Android GsonDemo

    网络上有很多Json解析库,这里我使用Gson来解析Json,Gson有个特点,就是要将数据的键作为变量封装到一个个实体中,如果值为数组的,变量的类型还必须是集合,然后通过Gson.fromJson来传入数据和实体类,再通过实体...

    两种方式解析json数据

    其次,**Gson库解析**是由Google提供的,它能将Java对象转换为它们对应的JSON表示,反之亦然。使用Gson,解析JSON变得非常直观,特别是当你已经有了与JSON结构匹配的Java对象模型。以下是一个使用Gson解析JSON的例子...

    converter-gson-2.5.0.jar

    可以解决implementation 'com.squareup.retrofit2:converter-gosn:2.5.0' 依赖失败的问题

    天气预报json解析

    标题中的“天气预报json解析”指的是在编程领域中,如何处理和解析来自网络的天气预报数据,这些数据通常以JSON(JavaScript Object Notation)格式提供。JSON是一种轻量级的数据交换格式,因其易于人阅读和编写,...

    gson和mysql的jar包

    gson和mysql的jar包,JavaWeb开发必备资源

Global site tag (gtag.js) - Google Analytics