Java JSON中的LinkedHashMap在get()时返回null
我从JSON构建了一个Java JSON中的LinkedHashMap在get()时返回null,java,android,Java,Android,我从JSON构建了一个LinkedHashMap。 当我记录条目时,它们就在这里,但是当我调用get()(例如40)时,它返回null。 我错在哪里 String json = "{\"0\":0,\"34\":0,\"36\":0,\"38\":0,\"40\":3}"; Gson gson = new GsonBuilder().create();
LinkedHashMap
。
当我记录条目时,它们就在这里,但是当我调用get()
(例如40)时,它返回null。
我错在哪里
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));
问题是键的类型不是
Byte
,而是String
。仅仅因为您强制转换,并不意味着库将正确地反序列化它,它不会查看您声明的java类型,而是查看fromJson
的第二个参数,它只是一个LinkedHashMap
,在本例中没有泛型
所以基本上:map.get(“40”)代码>
要将其正确反序列化为字节
,您可以:
LinkedHashMap=gson.fromJson(json,TypeToken.getParameterized(LinkedHashMap.class,Byte.class,Integer.class).getType());
System.out.println(“map.get(40)=”+map.get((字节)40));
注意,散列映射使用hashCode()
和equals()
并且40是int
文本(因此被装箱为整数)。现在看看字节
和整数
是否被视为相等(提示:equals()
的两个实现都使用instanceof
检查两者是否属于同一类型)。
item[0] = 0.0
item[34] = 0.0
item[36] = 0.0
item[38] = 0.0
item[40] = 3.0
map.get(40) = null