循环嵌套的JSON数组,让孩子拥有相同的对象模型

时间:2017-01-29 05:50:08

标签: java json

我有一个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数组来获取每个孩子的内容,直到没有孩子离开?如果没有递归函数,这可能吗?

1 个答案:

答案 0 :(得分:1)

我假设你有List消息:

以下是如何使用递归和迭代方式浏览所有子项:

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