流畅地从嵌套的 JSONObject 中获取键

Get keys from nested JSONObject fluently

我正在尝试从嵌套的 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();

提前致谢。

这里有一个可能性。

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