Gson将字符串转map时,int默认为double类型
gson能够将json字符串转换成map, 但是在转成map时, 会默认将字符串中的int , long型的数字, 转换成double类型 , 数字会多一个小数点 , 如 1 会转成 1.0
Gson gson = new Gson();
int , long -> double
为了不让gson进行这样的转换, 我们需要自定义gson的转换适配器TypeAdapter, 通过registerTypeAdapter函数, 对类型进行注册, 需要注意的是 , 在注册的类型(包括泛型), 需要跟你使用的类型, 完全一致, 否则可能会无法匹配, 得不到想要转换的结果.
获取对象的类型, 这里可以使用下面的方法
new TypeToken<TreeMap<String, Object>>(){}.getType()
或者直接写成
Map.class
需要gson解析的类型 ,
new JsonDeserializer<TreeMap<String, Object>>() ;
这时需要重写他的deserialize方法, 就是将其中json手动解析成map , 不对数据进行处理
Gson gson = new GsonBuilder().registerTypeAdapter(new TypeToken<TreeMap<String, Object>>(){}.getType(), new JsonDeserializer<TreeMap<String, Object>>() { @Override public TreeMap<String, Object> deserialize( JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { TreeMap<String, Object> treeMap = new TreeMap<>(); JsonObject jsonObject = json.getAsJsonObject(); Set<Map.Entry<String, JsonElement>> entrySet = jsonObject.entrySet(); for (Map.Entry<String, JsonElement> entry : entrySet) { treeMap.put(entry.getKey(), entry.getValue()); } return treeMap; } }).create();
在创建完gson之后, 使用时注意自己注册的type类型 , 这时转换出的int 不会变成double
TreeMap<String, Object> map =gson.fromJson(json, new TypeToken<TreeMap<String, Object>>(){}.getType());
转载于:https://www.cnblogs.com/yueguanguanyun/p/8435196.html
Gson将字符串转map时,int默认为double类型相关推荐
- Java中小数默认为double类型
A:5.3e12表示5.3乘以10的12次方,正确 B:在Java中,如果你输入一个小数,系统默认的是double类型的,这个式子相当于 float f=double 11.1,明显错误,如果想要表达 ...
- 【网上的都不靠谱?还是得改源码】用Javasisst的字节码插桩技术,彻底解决Gson转Map时,Int变成double问题...
一.探究原由 首先申明一下,我们要解决的问题有两个: Json串转Map时,int变double问题 Json串转对象时,对象属性中的Map,int变double问题 然后,我们来了解一下,Gson实 ...
- Gson转Map时,Int会变成double解决方法
Gson转Map时,Int会变成double解决方法 参考文章: (1)Gson转Map时,Int会变成double解决方法 (2)https://www.cnblogs.com/huangwenti ...
- Gson转换导致int转换成double的问题解决
使用情景:后端返回的json字符串,通过gson处理后,原本是int类型,现在获取到的是double类型的. 解决办法: Map<String,Object> map = new Map& ...
- 【牛客】CSL 的字符串 (stack map)
https://ac.nowcoder.com/acm/contest/551/D 这个题怎么说,data用来存储这个字母在字符串中最后一次出现的位置,vis则用来记录该字母是否在栈中. 当栈为空的时 ...
- 1.2 String字符串和整型int的相互转换,valueOf() 、parse()和toString()
String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的.前面部分主要讲解了 String 转换 int 和 int 转换 String 方法,后面部分对 va ...
- Java String字符串和整型int的相互转换
String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的. String转换为int String 字符串转整型 int 有以下两种方式: Integer.pa ...
- Java教程:Java String字符串和整型int的相互转换
Java教程String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的.本节前面部分主要讲解了 String 转换 int 和 int 转换 String 方法, ...
- 2019 蓝桥杯省赛 B 组模拟赛(一) 程序设计:后缀字符串 ( STL map 和 substr()函数的应用)
题目描述 一天蒜头君得到 n 个字符串 si ,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来 n ...
最新文章
- 基于SSL的mysql(MariaDB)主从复制
- 用tabbar mode为Emacs建立ta
- 解一元二次方程的C++实现
- 作为Leader如何与团队成员更好地沟通?
- sap 里的用户菜单是灰色的,不可用的解决方法
- oracle中备份package源码
- 【收藏】CentOS 7 安装NFS
- OpenCV3学习(11.5) FAST特征检测器FastFeatureDetector
- idea中,springboot项目部署到docker
- com 组件调用不起来_Spring Cloud Alibaba训练营 —— 分布式服务调用
- HTML - 'MARQUEE'
- 3. 什么是icmp?icmp与ip的关系_0.3亿人口的美国会比3亿人口的美国富裕吗?
- 软考计算机评职称,软考通过后如何评职称?
- 谁“杀死”了杀毒软件
- 80端口未被占用,却依然提示已被占用
- excel文件导入hive乱码_hive 从Excel中导入数据
- 阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]
- mysql 在指定的dsn中_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配。 JAVA...
- MRF,HMM,HMRF图像分割
- 【考研经验】2019双非应届生清华大学计算机专业课和复试心得