完美解决gson将Integer默认转换成Double的问题

 更新时间:2017年03月05日 11:19:21   投稿:jingxian  
下面小编就为大家带来一篇完美解决gson将Integer默认转换成Double的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

首先javascript只有这些个类型:

1、Number 在JavaScript中的双精度浮点格式

2、String 双引号的反斜杠转义的Unicode

3、Boolean true 或 false

4、Array 值的有序序列

5、Value 它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等

6、Object 无序集合键值对

7、Whitespace 可以使用任何一对中的令牌

8、null empty

所以可以得出结论其实在javascript中20和20.0其实是相等的,都是number类型,即javascript中没有整数类型一说。

因此我们用gson.fromJson(msg, new TypeToken<Map<String, Object>>() {}.getType())将json字符串msg

例如:

{"id":20,"name":"test"}转换成Map<String,Object>时,就会把数字类型的值都转换成了Double类型(此时map中key为“id”的值是一个Double类型,为20.0)

当我们再把这个Map用gson.toJson转换成json字符串时,奇葩的事情就发生了,不再和我们最开始传进来的json字符串一致了,变成了{"id":20.0,"name":"test"}

想让它们一致,可以这样创建gson对象:

<span style="font-family:arial, 宋体, sans-serif, tahoma, Microsoft YaHei;color:#454545;">   Gson gson = new GsonBuilder().
        registerTypeAdapter(Double.class, new JsonSerializer<Double>() {

          @Override
          public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
            if (src == src.longValue())
              return new JsonPrimitive(src.longValue());
            return new JsonPrimitive(src);
          }
        }).create();</span>

即如果是Double类型的,判断一下它和它的longValue是否相等,如果相等则说明小数位是补了一个".0",那么我们就返回src.longValue,否则直接返回Double src。

以上这篇完美解决gson将Integer默认转换成Double的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring学习笔记之bean的基础知识

    Spring学习笔记之bean的基础知识

    ean在Spring和SpringMVC中无所不在,将这个概念内化很重要,所以下面这篇文章主要给大家介绍了关于Spring学习笔记之bean基础的相关资料,文中通过示例代码介绍的非常详解,需要的朋友可以参考下。
    2017-12-12
  • 友盟 微信第三方登录示例

    友盟 微信第三方登录示例

    这篇文章主要介绍了友盟 微信第三方登录示例的相关资料,需要的朋友可以参考下
    2016-10-10
  • RocketMQ源码分析之Broker过期消息清理机制

    RocketMQ源码分析之Broker过期消息清理机制

    这篇文章主要为大家介绍了RocketMQ源码分析之Broker过期消息清理机制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Spring Boot使用Druid进行维度的统计和监控

    Spring Boot使用Druid进行维度的统计和监控

    这篇文章主要介绍了Spring Boot使用Druid进行维度的统计和监控,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • springboot vue 跨域问题的解决

    springboot vue 跨域问题的解决

    这篇文章主要介绍了springboot vue 跨域问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Java从入门到精通之旅类和对象全面解析

    Java从入门到精通之旅类和对象全面解析

    Java是一门纯面向对象的语言(OOP),在面向对象的世界里,一切皆为对象,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情,这篇文章主要介绍了Java从入门到精通之旅类和对象全面解析,需要的朋友可以参考下
    2025-04-04
  • Java使用设计模式中迭代器模式构建项目的代码结构示例

    Java使用设计模式中迭代器模式构建项目的代码结构示例

    这篇文章主要介绍了Java使用设计模式中迭代器模式构建项目的代码结构示例,迭代器模式能够对访问者隐藏对象的内部细节,需要的朋友可以参考下
    2016-05-05
  • Java基础之集合框架详解

    Java基础之集合框架详解

    这篇文章主要介绍了Java基础之集合框架详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • maven依赖包加载缓慢的原因以及解决方案

    maven依赖包加载缓慢的原因以及解决方案

    这篇文章主要介绍了maven依赖包加载缓慢的原因以及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java设置请求响应时间的多种实现方式

    Java设置请求响应时间的多种实现方式

    在前后端分离的开发模式中,前端请求后端获取数据时,合理设置响应时间(超时时间)是提升系统性能和用户体验的关键,本文将深入探讨如何在Java中设置请求的响应时间,需要的朋友可以参考下
    2025-01-01

最新评论