解决gson将Integer默认转换成Double的问题
来源:互联网 发布:网络系统集成案例 编辑:程序博客网 时间:2024/06/08 21:54
首先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。
1 0
- 解决gson将Integer默认转换成Double的问题
- 解决gson将Integer默认转换成Double的问题
- GSON封装(解决数字转成double问题)
- Gson将字符串转map时,int默认为double类型
- Gson将字符串转map时,int、long默认为double类型
- 如何将Map转换成Gson json
- gson ,将json转换成Map
- 解决Gson 处理Map将整型处理为浮点型的问题
- Gson 设定固定的日期格式来生成Gson-------Gson 可以将某个对象转换成json,也可将json转换成对象
- FileUpload获取上传文件的大小,将其转换为double类型出现了问题
- gson int long自动转换为double
- 解决Gson解析数据用map接收时int自动转化为double问题
- 解决Gson解析Date数据格式的问题
- java 的long转换double问题
- double和float转换的问题
- gson日期转换问题
- gson转换问题Date
- 解决double的精度问题-BigDecimal
- Linux安装php报错记录
- ActionBar溢出菜单的icon不显示的解决方法
- Grand Central Dispatch (GCD) Reference
- 四大 Java 内部类总结
- iOS切换动画CATransition
- 解决gson将Integer默认转换成Double的问题
- 在php中调用接口以及编写接口
- The Foundation Framework
- Android SDK目录结构及作用
- 理想的程序员
- Metal:对 iOS 中 GPU 编程的高度优化的框架
- Android 使用Scheme实现从网页启动APP
- 骑行应用开发《三》天气
- 带具有menu物理键的手机不显示溢出菜单按钮的解决方法