如何用jq合并两个json文件

fus*_*ion 3 merge json file jq

我有一个充满 json 文件的目录,其结构如下: file1

{
    "products": [
        {"f1": "v1"},
        {"f1": "v2"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

文件2:

{
    "products": [
        {"f1": "v3"},
        {"f1": "v4"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

“.products”的内容与示例中的内容不同,但我们可以假设它们是格式良好的更复杂的 json 值。

我想生成一个具有以下结构的文件:

[
    {"f1": "v1"},
    {"f1": "v2"},
    {"f1": "v3"},
    {"f1": "v4"}
]
Run Code Online (Sandbox Code Playgroud)

关于如何使用 jq 执行此操作有什么想法吗?

Aar*_*ron 6

您可以使用以下内容:

jq --slurp 'map(.products[])' /path/to/dir/*.json
Run Code Online (Sandbox Code Playgroud)

其中/path/to/dir/*.json应该是文件列表或bash glob,它将扩展到您要使用的 JSON 文件的列表。例如,对于当前目录中的两个文件,您可以使用file1,或者简单地使用前一个 glob 将扩展到的内容。file2file{1,2}file1 file2

--slurp标志指示jq读取数组中的所有输入,而不是单独处理它们。然后,我们将该数组的每个对象(文件的原始内容)映射到其产品的序列中。