java - JSON 中的 LinkedHashMap 在 get() 上返回 null
问题描述
LinkedHashMap<Byte, Integer>
我从 JSON构建一个。当我记录条目时,它们就在这里,但是当我调用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));
输出 :
item[0] = 0.0
item[34] = 0.0
item[36] = 0.0
item[38] = 0.0
item[40] = 3.0
map.get(40) = null
解决方案
那么问题是键的类型不是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));
推荐阅读
- excel - 如何检测邮箱地址和更新栏目?
- javascript - 动态加载后编译less文件
- python - Kivy MDGridLayout 固定列大小
- python - 计算两个张量之间的损失时的 Pytorch 错误。TypeError: __init__() 接受 1 个位置参数,但给出了 3 个
- json - 如何扩展 JSON 字符串中的 bash 变量?
- performance - 有没有办法在 nagios/icinga 性能数据中为标签添加多个值
- python - 对 neo4j 节点进行时间版本控制的最佳方法是什么?
- database - 通过 API 创建 MongoDB Atlas 数据库的副本
- reactjs - 仅在带有道具的路线上做出反应而不进行 api 调用
- sql - 为什么我违反了完整性约束?(ORA-02291)