JSON的LinkedHashMap在get()上返回null

时间:2020-09-16 07:01:46

标签: java android

我通过JSON构建了get()。 当我记录条目时,它们在这里,但是当我调用 String json = "{\"0\":0,\"34\":0,\"36\":0,\"38\":0,\"40\":3}"; Gson gson = new GsonBuilder().create(); LinkedHashMap<Byte, Integer> map = new LinkedHashMap<>(); map = gson.fromJson(json, map.getClass()); for (Map.Entry<Byte, Integer> entry : map.entrySet()) { Log.i(TAG, "item[" + entry.getKey() + "] = " + entry.getValue()); } Log.i(TAG, "map.get(40) = " + map.get(40)); (例如40)时,它返回null。 我哪里错了?

item[0] = 0.0
item[34] = 0.0
item[36] = 0.0
item[38] = 0.0
item[40] = 3.0
map.get(40) = null

输出:

<t t-set="current_subtotal" t-value="0"/>

1 个答案:

答案 0 :(得分:1)

问题是密钥的类型不是Byte-它们是String。仅仅因为您进行了强制转换,并不意味着库会正确地对其进行反序列化,所以它不会查看您声明的Java类型,而是查看fromJson的第二个参数,它只是一个LinkedHashMap,没有在这种情况下是泛型。

所以基本上:map.get("40");

要使其正确反序列化为Byte,您可以:

LinkedHashMap<Byte, Integer> map = gson.fromJson(json, TypeToken.getParameterized(LinkedHashMap.class, Byte.class, Integer.class).getType());
System.out.println("map.get(40) = " + map.get((byte)40));