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