完美解决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的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- 解决gson将Integer默认转换成Double的问题
- 解决gson将Integer默认转换成Double的问题
- 解决Gson2.0默认Int转Double问题
- NSString 转换 float 的精度问题, 换double类型可以解决
- 菜鸟完美解决mysql数据库字符编码问题教程(latin1转换为gbk)
- JNI数组类型转换遇到问题及解决(new jdouble(len)与new jdouble[len]的区别)
- 完美解决python中ndarray 默认用科学计数法显示的问题
- Nginx+Tomcat多站点访问默认主页问题-狒狒完美解决-Q9715234
- Android Intent传递Map<Integer,Bean>及List<Bean>类型值问题完美解决
- 【完美解决】在WIN10中,解决80端口默认被占用的问题
- 完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题
- 完美解决Collections.sort对double不能排序问题
- 解决Gson解析数据用map接收时int自动转化为double问题
- 用fastjson解析json数据顺序问题,用gson完美解决
- java amr格式转mp3格式(完美解决Linux下转换0K问题)
- 完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题
- 解决java中的java.lang.Integer cannot be cast to java.lang.Double问题
- java amr格式转mp3格式(完美解决Linux下转换0K问题)
- matlab数据类型转换遇到问题,及解决办法,sym,double ,vpa转换
- java amr格式转mp3格式(完美解决Linux下转换0K问题)