json - 用 jq 合并两个 JSON 对象

标签 json object merge jq

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

文件 1

{
    "key1": "value1",
    "key2": "value2"
}

文件2
{
    "key1": "valueA",
    "key3": "valueB"
}

我需要使用 jq 将这两者结合起来,以便最终得到一个包含两个对象的所有键的对象。如果有公共(public)键,我需要使用第二个对象的值。

我正在努力获得正确的表达方式。我认为这很简单
jq '. * .' file1 file2

应该给我我想要的,但是这会导致非 json 输出:
{
    "key1": "value1",
    "key2": "value2"
}
{
    "key1": "valueA",
    "key3": "valueB"
}

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

我怎样才能结合这两个对象?

最佳答案

通过传入多个输入文件,每个文件的内容都会流入。您要么必须将它们吞入其中,要么将各个输入组合起来。

$ jq -s 'add' file1 file2

或者
$ jq -n 'reduce inputs as $i ({}; . + $i)' file1 file2

或者,如果您想合并而不是添加。
$ jq -n 'reduce inputs as $i ({}; . * $i)' file1 file2

关于json - 用 jq 合并两个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47190554/

相关文章:

merge - 在数据流任务中,如何使用其他源的值限制行流动?

java - 在 json java 中切换值

javascript - 使用多个 javascript 文件

c++ - 调用的方法不工作 C++

javascript - 如何在js中将对象数组转换为嵌套对象,反之亦然

R:合并两个数据帧而不相乘行

Python Pandas : Merge or Filter DataFrame by Another. 有没有更好的方法?

json - 为什么使用 swift 3 将路径转换为字符串时会出现\n

javascript - Angular Schema 表单从 JSON 加载数据

javascript - HMLHttpRequest 无法加载。我正在尝试将 JSON 对象 POST 请求发送到 firebase