首页 > 解决方案 > 如何用jq合并两个json文件

问题描述

我有一个包含以下结构的 json 文件的目录,例如:file1

{
    "products": [
        {"f1": "v1"},
        {"f1": "v2"}
    ]
}

文件2:

{
    "products": [
        {"f1": "v3"},
        {"f1": "v4"}
    ]
}

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

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

[
    {"f1": "v1"},
    {"f1": "v2"},
    {"f1": "v3"},
    {"f1": "v4"}
]

关于如何使用 jq 做到这一点的任何想法?

标签: jsonfilemergejq

解决方案


您可以使用以下内容:

jq --slurp 'map(.products[])' /path/to/dir/*.json

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

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


推荐阅读