完美解决gson将Integer默认转换成Double的问题
作者:jingxian 发布时间:2022-06-06 00:53:36
标签: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。
0
投稿
猜你喜欢
- 前言由于现在网络层已经升级到RxJava2.x相关的了,所以需要做些调整。虽然RxJava1.x和RxJava2.x同属RxJava系列,但
- 概念代理:为控制A对象,而创建出新B对象,由B对象代替执行A对象所有操作,称之为代理。一个代理体系建立涉及到3个参与角色:真实对象(A),代
- 问题由来一个简单的需求,要求把和当前用户相关的数据置顶展示。这里,我用了一个简单的用户表来复现这个需求。很简单,查询语句后面加上:order
- 简介本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素
- 程序的结构分类:顺序结构:按照写代码的顺序 一次执行选择结构:根据条件的不同有选择的执行不同的代码循环结构:在一定条件下 反复执行某一片代码
- 前言:线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、
- 部署到webapps目录启动本文使用的Spring版本为Spring6,SpringBoot版本为3,JDK为17,可能会和之前有细微不同,
- 引言: 在现代的网络应用程序中,进行HTTP请求是一项常见的任务。Apache HttpClient是一个功能强大且广泛使用的Java库,它
- 示例 1 :使用搜索表单创建全屏模式我们要构建的小应用程序有一个应用程序栏,右侧有一个搜索按钮。按下此按钮时,将出现一个全屏模式对话框。它不
- Java 继承与多态的深入理解1、 什么是继承,继承的特点?子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从
- Android手势解锁本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点、路径、并且带有小九宫格显示图,和震动!让你学会使用这个简单,高效
- 最近学习了 C#实现文件上传与下载,现在分享给大家。1、C#文件上传创建MyUpload.htm页面,用于测试<form name=&
- 说到内存管理,笔者这里想先比较一下java与C、C++之间的区别:在C、C++中,内存管理是由程序员负责的,也就是说程序员既要完成繁重的代码
- 一、this 关键字的使用1. 概述this是什么?在Java中,this关键字比较难理解,它的作用和其词义很接近,表示&ldquo
- 引言Spring Boot的一个便捷功能是外部化配置,可以轻松访问属性文件中定义的属性。本文将详细介绍@ConfigurationPrope
- 以下代码为一个工具类package com.imooc.reflect;import java.lang.reflect.Method;pu
- 一:问题引入前面讲到用户支付完成之后微信支付服务器会发送回调通知给商户,商户要能够正常处理这个回调通知并返回正确的状态码给微信支付后台服务器
- 实现Struts登录1、jar包拷贝首先是建立java web项目,之后打开我们我们下载好strtus框架,Struts-1.2.9-bin
- 本文实例讲述了Java基于链表实现栈的方法。分享给大家供大家参考,具体如下:在上几小节中我们实现了基本的链表结构,并在上一节的底部给出了有关
- 前言项目中检测人脸图片是否合法的功能,之前用的是百度的人脸识别接口,由于成本高昂不得不寻求替代方案。什么是opencv?OpenCV是一个基