【问题标题】:Merge JSON arrays based on arbitrary keys to arrays根据数组的任意键合并 JSON 数组
【发布时间】:2021-11-06 07:54:56
【问题描述】:

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

第一个文件:

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

第二个文件:

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

第三个文件:

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

预期输出:

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

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

【问题讨论】:

    标签: json merge command-line-interface jq jtc


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2022-12-15
      相关资源
      最近更新 更多