在日常开发中我们常需要将json串与map进行相互转化,但是会出现int变成了doouble。
我遇到的场景
后端返回数据,经过gson解析之后long类型变成了double,之所以会发生这样的情况,是因为在javascript中20和20.0其实是相等的,都是number类型,即javascript中没有整数类型一说。
BaseResponse jsonResponse = GsonConvertUtil.fromJson(jsonReader, type);
{"status":200,"code":0,"message":"success","data":[{"id":1.0,"name":"账户安全"},{"id":2.0,"name":"新手教程"},
{"id":3.0,"name":"币币交易"},{"id":4.0,"name":"法币交易"}]}
这种情况我们只需要将创建Gson的方式改一下即可:
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());
} else {
return new JsonPrimitive(src);
}
}
}).create();
即如果是Double类型的,判断一下它和它的longValue是否相等,如果相等则说明小数位是补了一个".0",那么我们就返回src.longValue,否则直接返回Double src。