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