【问题标题】:Merge a list of json files containing JSON arrays合并包含 JSON 数组的 json 文件列表
【发布时间】:2020-03-25 22:10:35
【问题描述】:

我有一个 json 文件列表,例如:

file1.json
[
  {obj1}
]

file2.json
[
  {obj2}
]

我想将它们全部合并到一个文件中:

[
  {obj1},
  {obj2}
]

如何使用 jq 实现这一点?

【问题讨论】:

    标签: json jq


    【解决方案1】:

    您可以使用以下内容:

    jq -s 'add' file1.json file2.json
    

    使用-slurp 模式使jq 一次处理多个输入,将它们连接成一个包含两个数组的数组。我们可以通过使用add 过滤器转换输入数组来将它们合并为一个,该过滤器产生每个元素的总和,就像使用+ 一样;在数组上使用它会返回一个包含两个数组的所有元素的数组。

    【讨论】:

      【解决方案2】:

      可以像这样调用jq 两次来完成:

      jq -c '.[]' *.json | jq -s
      

      工作原理

      *.json 由 shell 评估并替换为匹配文件的列表。 jq 获取当前目录中所有 JSON 文件的名称作为参数。它一一读取它们并在它们包含的 JSON 上运行程序 .[]

      每个 JSON 文件都包含一个数组。 .[] 从数组中提取项目并转储它们。
      -c 告诉 jq 在一行上输出每个值(.[] 提取的项目)。

      第一个jq 命令的输出由输入文件中存储的数组中每个对象的一行组成。

      然后,此输出被馈送到第二个jq 命令,其-s 参数告诉它读取所有内容(它通常一次读取一个JSON)并将它从输入JSON 解码的所有对象放入一个数组中。这正是你想要的。

      【讨论】:

        猜你喜欢
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 2018-12-17
        相关资源
        最近更新 更多