使用jq合并两个JSON对象

Ale*_*s G 3 merge json object jq

我有两个json文件,每个文件包含一个简单对象,例如:

文件1

{
    "key1": "value1",
    "key2": "value2"
}
Run Code Online (Sandbox Code Playgroud)

文件2

{
    "key1": "valueA",
    "key3": "valueB"
}
Run Code Online (Sandbox Code Playgroud)

我需要使用jq组合这两个,以便最终得到一个包含来自两个对象的所有键的对象.如果有公共密钥,我需要使用第二个对象的值.

我正在努力寻找合适的表达方式.我觉得这很简单

jq '. * .' file1 file2
Run Code Online (Sandbox Code Playgroud)

应该给我我想要的东西,但这导致非json输出:

{
    "key1": "value1",
    "key2": "value2"
}
{
    "key1": "valueA",
    "key3": "valueB"
}
Run Code Online (Sandbox Code Playgroud)

如果我使用,也会发生同样的事情jq '. + .' file1 file2.

我该如何组合这两个对象?

Jef*_*ado 6

通过传入多个输入文件,每个文件的内容都会流入.您要么必须将它们插入或组合各个输入.

$ jq -s 'add' file1 file2
Run Code Online (Sandbox Code Playgroud)

要么

$ jq -n 'reduce inputs as $i ({}; . + $i)' file1 file2
Run Code Online (Sandbox Code Playgroud)

或者,如果您想合并而不是添加.

$ jq -n 'reduce inputs as $i ({}; . * $i)' file1 file2
Run Code Online (Sandbox Code Playgroud)