完美解决gson将Integer默认转换成Double的问题
首先javascript只有这些个类型:
1、Number在JavaScript中的双精度浮点格式
2、String双引号的反斜杠转义的Unicode
3、Booleantrue或false
4、Array值的有序序列
5、Value它可以是一个字符串,一个数字,真的还是假(true/false),空(null)等
6、Object无序集合键值对
7、Whitespace可以使用任何一对中的令牌
8、nullempty
所以可以得出结论其实在javascript中20和20.0其实是相等的,都是number类型,即javascript中没有整数类型一说。
因此我们用gson.fromJson(msg,newTypeToken
例如:
{"id":20,"name":"test"}转换成Map
当我们再把这个Map用gson.toJson转换成json字符串时,奇葩的事情就发生了,不再和我们最开始传进来的json字符串一致了,变成了{"id":20.0,"name":"test"}
想让它们一致,可以这样创建gson对象:
Gsongson=newGsonBuilder(). registerTypeAdapter(Double.class,newJsonSerializer (){ @Override publicJsonElementserialize(Doublesrc,TypetypeOfSrc,JsonSerializationContextcontext){ if(src==src.longValue()) returnnewJsonPrimitive(src.longValue()); returnnewJsonPrimitive(src); } }).create();
即如果是Double类型的,判断一下它和它的longValue是否相等,如果相等则说明小数位是补了一个".0",那么我们就返回src.longValue,否则直接返回Doublesrc。
以上这篇完美解决gson将Integer默认转换成Double的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。