有效地从JSONArray中的所有JSONObject获取特定键的值?

时间:2019-06-20 20:31:02

标签: java json org.json

我需要从JSONArray中的所有JSONObject中获取特定键的值(以下示例)。

我有一个传统的循环方法,我想知道是否有更好的方法可以做到这一点。

private static Collection<? extends String> someMethod(JSONArray jsonArray) {
    Set<String> setToReturn = new HashSet<>();
    for (int i = 0; i < jsonArray.length(); i++) {
        setToReturn.add(jsonArray.getJSONObject(i).getString("key"));
    }
    return setToReturn;
}

JSON示例如下:

"someArray": {
    "someObject": [
        {
            "key": "001",
            "key1": "value",
            "key2": "value",
            "key3": "value"
        }
    ],
    "someObject2": [
        {
            "key": "002",
            "key1": "value",
            "key2": "value",
            "key3": "value"
        }
    ],
    "someObject3": [
        {
            "key": "003",
            "key1": "value",
            "key2": "value",
            "key3": "value"
        }
    ],
}

基本上,我需要将每个JSONObject中的“键”放入Set或List中。

Example output: [001, 002, 003]

上面的代码有效,我想知道是否有更好的方法可以做到这一点。假设有成千上万个这样的JSONObjects。我正在使用org.json库。

谢谢。

1 个答案:

答案 0 :(得分:0)

没有更好的方法可以做到这一点。遍历数组的时间复杂度为O(n),从对象获取值的时间复杂度为O(1)。显然,您将需要访问每个值以将其添加到列表中,这就是为什么总时间复杂度必须为O(n)的原因。根据获取的值,插入列表可能比HashSet快一点,但这是最有效的方法