Gson解析转换为Map时,int、long等数值类型变量会被转换为Double类型
例如:json字符串中的{“key”,1}等数据,解析后,Map中的Object类型会被转换为Double类型
Map<String, Object> map = new Gson().fromJson(json, new TypeToken<Map<String, Object>>() {
}.getType());
解决方案:
public static Gson createGson() {
return new GsonBuilder()
.registerTypeAdapter(
new TypeToken<TreeMap<String, Object>>() {
}.getType(),
new JsonDeserializer<TreeMap<String, Object>>() {
@Override
public TreeMap<String, Object> deserialize(
JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
TreeMap<String, Object> treeMap = new TreeMap<>();
JsonObject jsonObject = json.getAsJsonObject();
Set<Map.Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
for (Map.Entry<String, JsonElement> entry : entrySet) {
treeMap.put(entry.getKey(), entry.getValue());
}
return treeMap;
}
}).create();
}
使用时
TreeMap<String, Object> map = gson.fromJson(json, new TypeToken<TreeMap<String, Object>>() {
}.getType());
但是,使用的时候还是遇到了问题,就是map.get(“key”)的值为”true”时,用boolean接收会报错
jsonPrimitive can not cast to boolean
探讨了使用Gson解析JSON字符串到Map时,int、long等数值类型被转换为Double的问题,并提供了一种定制化的解决方案。同时指出当Map中值为true时,按Boolean类型读取会遇到的问题。

被折叠的 条评论
为什么被折叠?



