gpt4 book ai didi

java - 获取 JSONObject 中 JSONArray 的集合形式的值

转载 作者:行者123 更新时间:2023-11-30 06:32:49 29 4
gpt4 key购买 nike

我有以下 JSONObject。我有一个名为 results 的属性,它又是一个由 JSONObject 组成的 JSONArray。现在我想看看是否有任何直接的方法可以以集合的形式获取 id,而无需在 map 或列表中显式创建和存储。预期输出是:

输出:

["123","345","567","891"]

JSONObject:

{
"status": {
"status": "OK",
"message": ""
},
"offset": 1,
"limit": "200",
"results": [
{
"id": “123”,
"title": “title1”
},
{
"id": “345”,
"title": “title2”
},
{
"id": “567”,
"title": “title3”
},

{
"id": “891”,
"title": “title4”
}
]
}

现在我正在获取 JSONArray 结果并迭代它,并将每次迭代的值保存在 MAP 中。请参见下文:

for (int k = 0; k <= resultsArray.length()-1 ; k++) {
JSONObject j = resultsArray.getJSONObject(k);
id = j.getLong("id");
map.put(title,
"\"" + Long.toString(id) + "\"");
}

原因: 这是在多线程环境中,如果我创建一个将是共享资源的 map ,并且我需要同步它,这会锁定另一个线程对该 map 的使用,这反过来会在我的情况下导致很大的性能问题。

请问有什么建议吗?

最佳答案

根据您的评论,您似乎不太关心列表或 HashMap 的创建,而是尝试跨多个不同线程协调结果集合的创建。

您可以采取多种方法,哪种方法最好取决于您的具体用例。

最简单的(从代码角度)可能是使用隐式并发的集合,例如 ConcurrentHashMap或包含在 Collections.synchronizedList() 中的列表。您可能会发现这些集合的性能比尝试管理您自己的线程锁定更好,但很难说性能是否足以满足您的情况。

另一种可能性是让每个线程解析 json 并独立生成一个单独的集合,因此您的大部分工作都是以线程安全的方式完成的,然后将结果合并到一个线程安全/同步操作中在最后。仅当 id 列表是循环所需的输出时,这才有效,并且您不需要在所有线程完成处理之前提供中间结果。但如果这对您有用,那么与在整个过程中让 10 个线程争夺单个资源相比,您可能会获得更好的性能。

关于java - 获取 JSONObject 中 JSONArray 的集合形式的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45739520/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com