根据数组的任意键合并 JSON 个数组

Merge JSON arrays based on arbitrary keys to arrays

使用 jqjtc,我想将 json 个文件的列表作为输入,并根据以下键生成单个 json 文件在每个输入文件中找到的数组。示例:

第一个文件:

{
  "key1": [
    "key1-out1"
  ]
}

第二个文件:

{
  "key1": [
    "key1-out2"
  ]
}

第 3 个文件:

{
  "key2": [
    "key2-out1"
  ]
}

预期输出:

{
  "key1": [
    "key1-out1"
    "key1-out2"
  ],
  "key2": [
    "key2-out1"
  ]
}

我遇到了this almost perfectly good answer但是我不能直接使用它,因为我不知道在每个输入文件中我会得到什么键

如果任何文件有多个密钥:

jq -n 'reduce inputs as $in ({}; 
        reduce ($in|keys_unsorted)[] as $k (.;
         .[$k] += $in[$k]))'  file1 file2 file3 # ...

您可能想要对此进行调整,以便在与键关联的值意外地不是数组时它不会失败。

如果您使用 gojq(jq 的 Go 实现),您将使用 keys 而不是 keys_unsorted