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