java - 如何使用 gson.fromjson 递归地转换 json

标签 java json gson

假设我有以下 json 结构:

{
    "Role": {
        "id": "5",
        "name": "bb1",
        "description": "desc1",
        "PermissionDeck": [
            {
                "id": "7",
                "Permission": [
                    {
                        "id": "398"
                    },
                    {
                        "id": "399"
                    },
                    {
                        "id": "400"
                    },
                    {
                        "id": "401"
                    },
                    {
                        "id": "402"
                    }
                ],
                "Limit": [
                    {
                        "id": "4"
                    },
                    {
                        "id": "5"
                    }
                ]
            }
        ]
    }
}

如果我想将其转换为 LinkedTreeMap 结果,以便可以通过以下方式检索其内容:

result.get("Role") 返回 Map

result.get("Role").get("PermissionDeck").size() == 5

result.get("Role").get("PermissionDeck").get(0).get("id") == 398

基本上使 gson.fromjson 递归地进入结构,并将任何嵌套结构折叠到 LinkedTreeMap 中,直到到达最内层,然后进入 LinkedTreeMap

如果不编写自定义递归方法,这可能吗?

最佳答案

你不能。最接近的是使用 JsonObject 并为每个嵌套成员使用适当的 getter。换句话说,您的代码需要明确说明它在 JSON 中所期望的内容。

例如

JsonObject result = new Gson().fromJson(theJson), JsonObject.class);
System.out.println(result.getAsJsonObject("Role").getAsJsonArray("PermissionDeck").size());

将打印 1,因为在根 JSON 对象中名为 Role 的 JSON 对象中,名为 PermissionDeck 的 JSON 数组中只有一个元素.

关于java - 如何使用 gson.fromjson 递归地转换 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337617/

相关文章:

javascript - 如何在 JSON 中使用占位符

java - 如何创建接收 Gson().fromJson() 的对象

android - 如何将文档快照(复杂对象)保存到共享首选项或文件?

java - Maven 和 m2e - 使用依赖信息构建 jar

jquery - 使用 jQuery 创建和附加数据 block

java - 为什么我不能用 Java 写 "implements AClass"?

java - 如何在 Java 中的 Json 序列化期间避免无限循环

java - Retrofit 2.0 + GSON 无法为接口(interface)调用无参数构造函数

java - 滑动刷新后加载更多不起作用

java - 使用 gradle 构建 Cordova 项目时覆盖 Java 版本