假设我在内存中有两个 JSONObjects 数组,每个对象都有一个在两个数组中相似的键:
数组 1
[
{
"name": "Big Melons Co.",
"location": "Inner City Dubai"
"id": "1A"
},
{
"name": "Pear Flavored Juices Ltd",
"location": "Seychelles"
"id": "2A"
},
{
"name": "Squeeze My Lemons LLC",
"location": "UK"
"id": "3A"
}, {other JSON Objects...} ]
数组 2
[
{
"acceptsCard": "true"
"id": "1A"
},
{
"acceptsCard": "false"
"id": "2A"
},
{
"acceptsCard": "false"
"id": "3A"
}, {other JSON Objects...} ]
现在,我想根据主键“id”将两个数组合并在一起,以便它们在我的服务器端成为一个数组,然后将结果发送回我的前端——生成的对象数组列表应该如下所示:
合并数组(结果)
[
{
"name": "Great Juice Co.",
"location": "Inner City Dubai"
"acceptsCard": "true"
"id": "1A"
},
{
"name": "Pear Flavored Juices Ltd",
"location": "Seychelles"
"acceptsCard": "false"
"id": "2A"
},
{
"name": "Squeeze My Lemons LLC",
"location": "UK"
"acceptsCard": "false"
"id": "3A"
}, {other JSON Objects...} ]
我怎样才能有效地做到这一点?
我可以想到一种非常低效的方法来做到这一点(我很害怕实现这个)——我会遍历数组 1 或 2 中的每个项目,并对“id”中的字符串使用 equal() 方法字段看两者是否匹配。如果它们匹配,我将创建一个新的 JSONObject 以包含数组 1 和 2 中的字段。
最佳答案
我的 Java 有点生疏,但我会使用 map 。
List<JSONObject> objectsA = ... ;
List<JSONObject> objectsB = ... ;
Map entries = new HashMap<String, JSONObject>();
List<JSONObject> allObjects = new ArrayList<JSONObject>();
allObjects.addAll(objectsA);
allObjects.addAll(objectsB);
for (JSONObject obj: allObjects) {
String key = obj.getString("id");
JSONObject existing = entries.get(key);
if (existing == null) {
existing = new JSONObject();
entries.put(key, existing);
}
for (String subKey : obj.keys()) {
existing.put(subKey, obj.get(subKey));
}
}
List<JSONObject> merged = entries.values();
这比两个嵌套循环更有效,并且仍有改进的空间。
编辑:对外部文档和相关答案的引用。
关于Java:将两个json对象与主键合并在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32850554/