Type type = new TypeToken<Map<String, Object>>() {
}.getType();
Map<String, Object> dataMap = gson.fromJson(json, type);
调用以上代码把json串转换为map时,如果json串中包含0、1等int类型的内容,map中将会转成“0.0”、“1.0”等浮点类型。
可以通过一下方式消除这种类型转换异常:
private static Gson gson = 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) {
Object ot = entry.getValue();
if(ot instanceof JsonPrimitive){
treeMap.put(entry.getKey(), ((JsonPrimitive) ot).getAsString());
}else{
treeMap.put(entry.getKey(), ot);
}
}
return treeMap;
}
}).create();
private static Type typeToken = new TypeToken<TreeMap<String, Object>>(){}.getType();
然后在转换的地方这样调用:
loadJSON(){
TreeMap<String, Object> map = gson.fromJson(json, typeToken);
//bodyMap.get("error").toString();
//Integer.parseInt(bodyMap.get("errno").toString());
}