Java:将两个json对象与主键合并在一起

标签 java arrays json primary-key

假设我在内存中有两个 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/

相关文章:

javascript - 删除javascript数组中的数据列

java - 如何找到 Play Framework 应用程序的绝对路径?

java - Maven:从另一个模块导入目标文件夹

java - 从高到低对 int 数组进行排序

javascript - Dojo/JSON 对具有多个参数的方法发出请求?

javascript - 如何用方括号替换左花括号和右花括号并删除 Java 脚本 ES6 中的 json 数组上的标签

javascript - 从数组转换为 Google Visualization DataTable 时数组项丢失

java - 如何同步访问 Java Hashmap 中的值?

arrays - Go Lang 打印输入数组

javascript - 在Javascript中获取数字之间的数字步骤