java - 使用 gson 包解析嵌套的 json 结构

标签 java json gson

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"));

我在第一次递归函数调用时在运行时遇到以下错误

javax.servlet.ServletException: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap

我还没有尝试过 Parse a nested JSON using gson 中定义的方式使用 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);
...

关于java - 使用 gson 包解析嵌套的 json 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54054021/

相关文章:

c# - Json文件请求产生“(413)请求实体太大”。

java - 解析 JSON 时,出现奇怪的异常::This is not a JSON Array

java - 不同类型值的 JSON 到 POJO 转换错误

java - 在多线程环境中同步 HashMap 仅用于 put 和 remove

java - 如何在按钮单击java时显式触发按键事件

json - 在 Grails 中选择深或浅的 JSON 序列化

android - Gson 中的 RuntimeException 解析 JSON : Failed to invoke protected java. lang.ClassLoader() with no args

java - Spring 中使用 Gson 的 Web 服务

java - 了解集合并发性和 Collections.synchronized*

java - 如何使用 Dropbox API V2 下载特定文件?