繁体   English   中英

Parsing JSON response from api using Java containing multiple JSON arrays

[英]Parsing JSON response from api using Java containing multiple JSON arrays

我有来自 API 响应的以下 JSON 。 我需要捕获级别 1、级别 11、级别 111 和级别 1111 的名称和来源。这可能会根据我们在应用程序中放置的顺序而增加或减少。 当级别数固定时,我可以使用 JSON 解析器解析并获取名称和来源,但如果这不断改变我该如何解决这个问题。 JSON 响应如下 -

 "root": { "name": "Test", "version": 1, "type": "process", "steps": [{ "name": "Level 1", "origin": "Origin1", "type": "step", "state": "complete", "steps": [] }, { "name": "Level 2", "origin": "Origin2", "type": "step", "state": "complete", "steps": [] }, { "name": "Level 3", "origin": "Origin3", "type": "process", "state": "error", "steps": [{ "name": "Level 11", "origin": "origin 11", "type": "step", "state": "complete", "steps": [] }, { "name": "Level 12", "origin": "origin 12", "type": "step", "state": "complete", "operation": "fulfill", "steps": [] }, { "name": "Level 13", "origin": "origin 13", "type": "process", "state": "error", "steps": [{ "name": "Level 111", "origin": "origin 111", "type": "step", "state": "complete", "steps": [] }, { "name": "Level 112", "origin": "Origin 112", "type": "process", "state": "complete", "steps": [{ "name": "Level 1111", "origin": "origin 1111", "type": "step", "state": "complete", "steps": [] }] } ] }] }] }

假设您使用的是org.json ,您可以使用如下方法遍历整个树:

public static void parse(JSONArray arg) {
    for (int i = 0; i<arg.length(); i++) {
        System.out.println(arg.getJSONObject(i).getString("name"));
        System.out.println(arg.getJSONObject(i).getString("origin"));
        parse (arg.getJSONObject(i).getJSONArray("steps"));
    }
}

从代码中,您可以看到我只显示名称和来源。 有一个遍历每个步骤数组的递归调用。 一旦你得到初始的 object object(假设你使用的是变量 response),你就可以调用 parse 方法:

JSONObject jo = new JSONObject(response);
JSONObject jo_root = jo.getJSONObject("root");
parse(jo_root.getJSONArray("steps"));

我相信你知道如何从这里只打印你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM