Разбор JSON ответа от api с использованием Java, содержащего несколько массивов JSON - PullRequest
0 голосов
/ 05 августа 2020

У меня есть следующее JSON из ответа API. Мне нужно записать имя и происхождение для Уровня 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": [] }] } ] }] }] }

1 Ответ

0 голосов
/ 05 августа 2020

Предполагая, что вы используете 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"));
    }
}

Из кода вы можете видеть, что I отображаю только имя и происхождение. Существует рекурсивный вызов, который проходит каждый массив шагов. Как только вы получите исходный объект-объект (при условии, что вы используете переменную response), вы можете просто вызвать метод синтаксического анализа:

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

Я уверен, что вы знаете, как распечатать только те, которые вы хотите отсюда .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...