java - 使用单个 for 循环对 JSONArray 进行排序

标签 java json

我有一个包含 5 个不同 JSONObject 的 JSONArray,并且这 5 个 JSONObject 中的每一个都有一个标识符字符串值。这五个值是“aa”、“bb”、“erer”、“cc”、“gg”。我的要求是将标识符为“erer”的 JSONObject 放在第一位,并且以下 JSONObject 可以按任何顺序排列。 json 是:

{
"obj":[
{"identifier":"aa",},
{"identifier":"bb",},
{"identifier":"erer",},
{"identifier":"cc",},
{"identifier":"gg",}
]
}

最终结果必须是“erer”、“aa”、“bb”、“cc”、“gg”,我需要在一个循环中执行此操作。

我可以通过两个循环来完成此操作。

for (int i = 0; i < jsonArray.length(); i++) {
     JSONObject j = jsonArray.getJSONObject(i); 
     if(j.getString("identifier").equals("erer")) {
     sortedJson.put(joPayLoad);
}
}
for (int i = 0; i < jsonArray.length(); i++) {
     JSONObject j = jsonArray.getJSONObject(i); 
     if(!j.getString("identifier").equals("erer")) {
     sortedJson.put(joPayLoad);
}
}

但是 JsonArray 也可能有 10,000 个 JSONObject。因此,这个“两个 for 循环”会导致性能滞后。因此,请帮助我在一个循环中实现上述要求。 提前致谢!

最佳答案

鉴于 JsonArray 是一个列表 ( source ),您可以尝试将值与 erer 交换为新的第一个元素:

for (int i = 0; i < jsonArray.length(); i++) {
     JsonValue j = jsonArray.get(i); 
     if(j.getString("identifier").equals("erer")) {
        JsonValue tmp = jsonArray.get(0);
        jsonArray.set(0, j);
        jsonArray.set(i, tmp);
        break;
     }
}

因为我没有安装 EE,所以没有尝试过,但也许你可以使用提供的方法使其工作。

关于java - 使用单个 for 循环对 JSONArray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718447/

相关文章:

javascript - lodash 中不区分大小写的 group By

javascript - 在mapbox/leaflet上聚类geojson文件

javascript - 将 JSON 保存到 SQL

java - 如何提前取消timer.schedule()调用

java - 如何在docker run中指定JDK_JAVA_OPTIONS

Canvas 的 Java ScrollPane 实现

java - 将 Netbeans 平台与 JavaFX 2 结合使用?

c# - Newtonsoft.Json JsonConvert to XmlDocument 元素有属性时日期格式不一致

javascript - 使用 AngularJS 中的数据更新 JSON 文件

java - 如何在 Java 中使用 ECC 对 key 进行非对称加密?