【发布时间】:2020-03-25 22:10:35
【问题描述】:
我有一个 json 文件列表,例如:
file1.json
[
{obj1}
]
file2.json
[
{obj2}
]
我想将它们全部合并到一个文件中:
[
{obj1},
{obj2}
]
如何使用 jq 实现这一点?
【问题讨论】:
我有一个 json 文件列表,例如:
file1.json
[
{obj1}
]
file2.json
[
{obj2}
]
我想将它们全部合并到一个文件中:
[
{obj1},
{obj2}
]
如何使用 jq 实现这一点?
【问题讨论】:
您可以使用以下内容:
jq -s 'add' file1.json file2.json
使用-slurp 模式使jq 一次处理多个输入,将它们连接成一个包含两个数组的数组。我们可以通过使用add 过滤器转换输入数组来将它们合并为一个,该过滤器产生每个元素的总和,就像使用+ 一样;在数组上使用它会返回一个包含两个数组的所有元素的数组。
【讨论】:
可以像这样调用jq 两次来完成:
jq -c '.[]' *.json | jq -s
*.json 由 shell 评估并替换为匹配文件的列表。 jq 获取当前目录中所有 JSON 文件的名称作为参数。它一一读取它们并在它们包含的 JSON 上运行程序 .[]。
每个 JSON 文件都包含一个数组。 .[] 从数组中提取项目并转储它们。-c 告诉 jq 在一行上输出每个值(.[] 提取的项目)。
第一个jq 命令的输出由输入文件中存储的数组中每个对象的一行组成。
然后,此输出被馈送到第二个jq 命令,其-s 参数告诉它读取所有内容(它通常一次读取一个JSON)并将它从输入JSON 解码的所有对象放入一个数组中。这正是你想要的。
【讨论】: