【问题标题】:Looping through nested JSON array, getting children with same object model遍历嵌套的 JSON 数组,获取具有相同对象模型的子对象
【发布时间】:2017-01-29 05:50:08
【问题描述】:

我的 JSON 响应如下所示:

[
    {
        "id": 5,
        "user_id": 1,
        "message": "Hello",
        "children": [
            {
                "id": 7,
                "user_id": 2,
                "message": "Hi",
                "children": [
                    {
                        "id": 8,
                        "user_id": 3,
                        "message": "Hey",
                        "children": [

                        ]
                    }
                ]
            }
        ]
    },
    {
        "id": 6,
        "user_id": 4,
        "message": "Ahoy",
        "children": [

        ]
    }
]

我已经创建了模型 (Message.java)。可以拨打getChildren() 找回孩子。响应保存在List<Message> messages 列表中。

如何遍历这个 JSON 数组以获取每个孩子的内容,直到没有孩子为止?如果没有递归函数,这可能吗?

【问题讨论】:

  • 我仍然对你想要做什么感到有点困惑。你能详细说明一下你到底在用这个 json 做什么吗?以及您想如何存储它?

标签: java json


【解决方案1】:

我假设你有列表消息:

以下是您可以通过递归和迭代方式浏览所有子项的方法:

List<Message> messages = //you already have that

System.out.println("Using Recusion : ");

for (Message message : messages) {
    printMessage(message);
}

System.out.println("Using Iterative : ");

Stack<Message> stack = new Stack<>();
stack.addAll(messages);

while (!stack.empty()) {
    Message item = stack.pop();
    System.out.println(item.getId() + ":" + item.getUser_id() + ":" + item.getMessage());
    for (Message chidren : item.getChildren()) {
        stack.push(chidren);
    }
}

这里是 printMessage 方法:

public static void printMessage(Message pmessage) {
    System.out.println(pmessage.getId() + ":" + pmessage.getUser_id() + ":" + pmessage.getMessage());
    for (Message message : pmessage.getChildren()) {
        printMessage(message);
    }
}

【讨论】:

    【解决方案2】:
            public void printJsonObject(JSONObject jsonObj) {
                for (String keyStr : jsonObj.keySet()) {
                    Object keyvalue = jsonObj.get(keyStr);
    
                    //Print key and value
                    System.out.println("key: "+ keyStr + " value: " + keyvalue);
    
                    //for nested objects iteration if required
                    if (keyvalue instanceof JSONObject)
                        printJsonObject((JSONObject)keyvalue);
                }
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多