昨天在写 android 的一个项目时,遇到字符型的 JSON 数据中整形的数字竟然被 gson 转换成了带有小数点的 doubile 的奇葩现象。虽然问题已经解决但还是有需要记录下来。
在之前有记录过利用 gson 解决过对象型的 JSON 与字符型的JSON 之间的转换。
使用Gson和GsonFormat解析复杂Json
https://blog.pkcms.cn/archives/1427
但问题出来了呢就还是要去解决,那么问题的现象是这样的,例如,原本的字符型的 JSON 数据是:
{"id":20,"name":"test"}
在经过 gson 转换后会变成了
{"id":20.0,"name":"test"}
想要解决这个问题的方法是:
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();
以上的解决代码的逻辑是:如果这个数据是Double类型的,判断一下它和它的longValue是否相等,如果相等则说明小数位是补了一个”.0″,那么我们就返回src.longValue,否则直接返回Double src。
以上这篇完美解决gson将Integer默认转换成Double的问题了。