java - 使用 gson 包解析嵌套的 json 结构
问题描述
Java中JSON结构的解码已经得到解答,我已经将它用于几个简单的结构,但这似乎有点棘手。(我没有花太多时间开发 Java 代码,所以我可能在这里遗漏了一些特定于语言的东西,我也可能错了)
{
"who": "123",
"mapping": {
"element1": {
"element11": {
"relation": "rel1",
"direction_p2c": true,
"element111": {
"relation": "rel2",
"direction_p2c": true,
"element1111": {
"relation": "rel1",
"direction_p2c": false
},
"element1112": {
"relation": "rel1",
"direction_p2c": false
},
"element1113": {
"relation": "rel1",
"direction_p2c": false
}
},
"element112": {
"relation": "rel3",
"direction_p2c": false
}
},
"element12": {
"relation": "rel1",
"direction_p2c": true,
"element121": {
"relation": "rel2",
"direction_p2c": true,
"element1211": {
"relation": "rel1",
"direction_p2c": false
}
}
}
},
"element2": {
"element21": {
"relation": "rel2",
"direction_p2c": true
},
"element22": {
"relation": "rel3",
"direction_p2c": true
},
"element23": {
"relation": "rel1",
"direction_p2c": true
}
}
}
}
上面是提到的结构,我正在使用Gson
解码,下面是我正在尝试的,
void recursive(String key, HashMap<String, Object> value) {
for (Map.Entry<String, Object> entry: value.entrySet()) {
recurssive(entry.getKey(), (HashMap<String, Object>) entry.getValue());
}
}
HashMap<String, Object> decodedJson = new Gson().fromJson(inputJson, HashMap.class);
recursive("mapping", (HashMap<String, Object>) decodedJson.get("mapping"));
我在第一次recursive
函数调用时在运行时遇到以下错误
javax.servlet.ServletException: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap
我还没有尝试使用Parse a nested JSON using gson using中定义的方式进行此操作JsonParser
,但对此解码中的任何输入表示赞赏。
解决方案
用接口替换java.util.HashMap
类。java.util.Map
它是由 Gson 实现的,LinkedTreeMap
所以不会触发ClassCastException
。
void recursive(String key, Map<String, Object> value) {
...
}
Map<String, Object> decodedJson = new Gson().fromJson(inputJson, Map.class);
...
推荐阅读
- python - 如何查找图形上的两个点是否相交
- javascript - 如何下载图像(节点获取),调整大小(锐化)并上传到 S3,而不使用 Node.js 将其保存在本地(已回答)
- laravel - 可以在 migrate:reset 之后修改迁移吗?
- excel - 如何在 Excel VBA 的 word 文档的每一页上粘贴值?
- javascript - 在 Node.js 中使用 Tone.js 时未定义 AudioBuffer
- powershell - 为用户分配号码微软团队
- mysql - 使用嵌套事务时,嵌套事务会看到外部事务所做的更改吗?
- python - 具有多台服务器的异步循环
- firebase - 如何在颤动中将自定义日期发送到 Firestore
- java - Kotlin:如何转换数组
- 到数组?