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类型相关推荐

  1. Java中小数默认为double类型

    A:5.3e12表示5.3乘以10的12次方,正确 B:在Java中,如果你输入一个小数,系统默认的是double类型的,这个式子相当于 float f=double 11.1,明显错误,如果想要表达 ...

  2. 【网上的都不靠谱?还是得改源码】用Javasisst的字节码插桩技术,彻底解决Gson转Map时,Int变成double问题...

    一.探究原由 首先申明一下,我们要解决的问题有两个: Json串转Map时,int变double问题 Json串转对象时,对象属性中的Map,int变double问题 然后,我们来了解一下,Gson实 ...

  3. Gson转Map时,Int会变成double解决方法

    Gson转Map时,Int会变成double解决方法 参考文章: (1)Gson转Map时,Int会变成double解决方法 (2)https://www.cnblogs.com/huangwenti ...

  4. Gson转换导致int转换成double的问题解决

    使用情景:后端返回的json字符串,通过gson处理后,原本是int类型,现在获取到的是double类型的. 解决办法: Map<String,Object> map = new Map& ...

  5. 【牛客】CSL 的字符串 (stack map)

    https://ac.nowcoder.com/acm/contest/551/D 这个题怎么说,data用来存储这个字母在字符串中最后一次出现的位置,vis则用来记录该字母是否在栈中. 当栈为空的时 ...

  6. 1.2 String字符串和整型int的相互转换,valueOf() 、parse()和toString()

    String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的.前面部分主要讲解了 String 转换 int 和 int 转换 String 方法,后面部分对 va ...

  7. Java String字符串和整型int的相互转换

    String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的. String转换为int String 字符串转整型 int 有以下两种方式: Integer.pa ...

  8. Java教程:Java String字符串和整型int的相互转换

    Java教程String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的.本节前面部分主要讲解了 String 转换 int 和 int 转换 String 方法, ...

  9. 2019 蓝桥杯省赛 B 组模拟赛(一) 程序设计:后缀字符串 ( STL map 和 substr()函数的应用)

    题目描述 一天蒜头君得到 n 个字符串 si ,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来 n ...

最新文章

  1. 基于SSL的mysql(MariaDB)主从复制
  2. 用tabbar mode为Emacs建立ta
  3. 解一元二次方程的C++实现
  4. 作为Leader如何与团队成员更好地沟通?
  5. sap 里的用户菜单是灰色的,不可用的解决方法
  6. oracle中备份package源码
  7. 【收藏】CentOS 7 安装NFS
  8. OpenCV3学习(11.5) FAST特征检测器FastFeatureDetector
  9. idea中,springboot项目部署到docker
  10. com 组件调用不起来_Spring Cloud Alibaba训练营 —— 分布式服务调用
  11. HTML - 'MARQUEE'
  12. 3. 什么是icmp?icmp与ip的关系_0.3亿人口的美国会比3亿人口的美国富裕吗?
  13. 软考计算机评职称,软考通过后如何评职称?
  14. 谁“杀死”了杀毒软件
  15. 80端口未被占用,却依然提示已被占用
  16. excel文件导入hive乱码_hive 从Excel中导入数据
  17. 阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]
  18. mysql 在指定的dsn中_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配。 JAVA...
  19. MRF,HMM,HMRF图像分割
  20. 【考研经验】2019双非应届生清华大学计算机专业课和复试心得

热门文章

  1. 《互联网运营智慧》十一月进展
  2. 用cmake编译caffe
  3. 【正一专栏】读《怎样做社会研究》——社会研究的意义
  4. HDFS多用户管理ACL机制other权限访问控制的理解
  5. 基于快速原型模型建立商业呼叫中心SPOMP的应用研究
  6. 创建oracle dblink权限不足,Oracle-存储过程-创建sequence的时候报权限不足
  7. Use Asynchronous Apex
  8. 工厂设计模式——简单工厂模式——未完待续
  9. List集合与List的子类
  10. 转载:python3 安装pycrypto