如何使用jq将两个文件中的数组合并为一个数组?

Smi*_*ver 3 json join jq

我想合并两个包含JSON的文件。它们每个都包含一个JSON对象数组。

registration.json

[
    { "name": "User1", "registration": "2009-04-18T21:55:40Z" },
    { "name": "User2", "registration": "2010-11-17T15:09:43Z" }
]
Run Code Online (Sandbox Code Playgroud)

useredits.json

[
    { "name": "User1", "editcount": 164 },
    { "name": "User2", "editcount": 150 },
    { "name": "User3", "editcount": 10 }
]
Run Code Online (Sandbox Code Playgroud)

在理想情况下,由于合并操作,我希望获得以下内容:

[
    { "name": "User1", "editcount": 164, "registration": "2009-04-18T21:55:40Z" },
    { "name": "User2", "editcount": 150, "registration": "2010-11-17T15:09:43Z" }
]
Run Code Online (Sandbox Code Playgroud)

我已经找到https://github.com/stedolan/jq/issues/1247#issuecomment-348817802但我得到了

jq: error: module not found: jq
Run Code Online (Sandbox Code Playgroud)

Smi*_*ver 6

虽然没有严格回答问题,但下面的命令

jq -s 'flatten | group_by(.name) | map(reduce .[] as $x ({}; . * $x))'
      registration.json useredits.json
Run Code Online (Sandbox Code Playgroud)

生成此输出:

[
    { "name": "User1", "editcount": 164, "registration": "2009-04-18T21:55:40Z" },
    { "name": "User2", "editcount": 150, "registration": "2010-11-17T15:09:43Z" },
    { "name": "User3", "editcount": 10 }
]
Run Code Online (Sandbox Code Playgroud)

来源: jq - 合并两个 JSON 文件时出错“无法相乘”


Rom*_*est 5

jq 解:

jq -s '[ .[0] + .[1] | group_by(.name)[] 
          | select(length > 1) | add ]' registration.json useredits.json
Run Code Online (Sandbox Code Playgroud)

输出:

[
  {
    "name": "User1",
    "registration": "2009-04-18T21:55:40Z",
    "editcount": 164
  },
  {
    "name": "User2",
    "registration": "2010-11-17T15:09:43Z",
    "editcount": 150
  }
]
Run Code Online (Sandbox Code Playgroud)