Получите ключи от вложенного JSONObject свободно - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь извлечь значение из вложенного JSONObject, скажем, "id".Я использую пакет org.json.simple, и мой код выглядит следующим образом:

JSONArray entries = (JSONArray) response.get("entries");
JSONObject entry = (JSONObject) entries.get(0);
JSONArray runs = (JSONArray) entry.get("runs");
JSONObject run = (JSONObject) runs.get(0);
String run_id = run.get("id").toString();

, где ответом является JSONObject.

Возможно ли выполнить рефакторинг кода с помощью Fluent Interface Pattern, чтобы кодболее читабельным?Например,

String run_id = response.get("entries")
        .get(0)
        .get("runs")
        .get(0)
        .get("id").toString();

Заранее спасибо.

1 Ответ

0 голосов
/ 04 января 2019

Вот такая возможность.

class FluentJson {
    private Object value;

    public FluentJson(Object value) {
        this.value = value;
    }

    public FluentJson get(int index) throws JSONException {
        JSONArray a = (JSONArray) value;
        return new FluentJson(a.get(index));
    }

    public FluentJson get(String key) throws JSONException {
        JSONObject o = (JSONObject) value;
        return new FluentJson(o.get(key));
    }

    public String toString() {
        return value == null ? null : value.toString();
    }

    public Number toNumber() {
        return (Number) value;
    }
}

Вы можете использовать это так

String run_id = new FluentJson(response)
    .get("entries")
    .get(0)
    .get("runs")
    .get(0)
    .get("id").toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...