Json 在同一个键下合并数组

Json 在同一个键下合并数组,json,jq,Json,Jq,我有两个包含对象的文件。每个对象的字段都是对象数组。我想按每个键合并对象数组 我试图通过jq-s.[0]*.[1]| to_entries[].key'file1.json file2.json获取所有密钥的列表。捕获对象数组后,我不确定如何匹配从[1]到[0]的键 file1.json { "foo": [ { "nested": "object" } ], "bar": [ {

我有两个包含对象的文件。每个对象的字段都是对象数组。我想按每个键合并对象数组

我试图通过
jq-s.[0]*.[1]| to_entries[].key'file1.json file2.json
获取所有密钥的列表。捕获对象数组后,我不确定如何匹配从[1]到[0]的键

file1.json

{
    "foo": [
        {
            "nested": "object"
        }
    ],
    "bar": [
        {
            "nested": "object.bar"
        }
    ]

}
{
    "foo": [
        {
            "nested": "object.foo2"
        }
    ],
    "baz": [
        {
            "nested": "object.baz"
        }
    ]

}
{
    "foo": [
        {
            "nested": "object"
        },
        {
            "nested": "object.foo2"
        },

    ]
    "bar": [
        {
            "nested": "object.bar"
        }
    ]
    "baz": [
        {
            "nested": "object.baz"
        }
    ]

}
file2.json

{
    "foo": [
        {
            "nested": "object"
        }
    ],
    "bar": [
        {
            "nested": "object.bar"
        }
    ]

}
{
    "foo": [
        {
            "nested": "object.foo2"
        }
    ],
    "baz": [
        {
            "nested": "object.baz"
        }
    ]

}
{
    "foo": [
        {
            "nested": "object"
        },
        {
            "nested": "object.foo2"
        },

    ]
    "bar": [
        {
            "nested": "object.bar"
        }
    ]
    "baz": [
        {
            "nested": "object.baz"
        }
    ]

}
merged.json

{
    "foo": [
        {
            "nested": "object"
        }
    ],
    "bar": [
        {
            "nested": "object.bar"
        }
    ]

}
{
    "foo": [
        {
            "nested": "object.foo2"
        }
    ],
    "baz": [
        {
            "nested": "object.baz"
        }
    ]

}
{
    "foo": [
        {
            "nested": "object"
        },
        {
            "nested": "object.foo2"
        },

    ]
    "bar": [
        {
            "nested": "object.bar"
        }
    ]
    "baz": [
        {
            "nested": "object.baz"
        }
    ]

}

使用嵌套的
reduce
s:

reduce inputs as $in (.;
  reduce ($in | keys_unsorted[]) as $k (.;
    .[$k] += $in[$k]
  )
)

您可以使用以下功能:

map(to_entries) | add | group_by(.key) | map({ key: (.[0].key), value:([.[].value | add]) }) | from_entries

map(to_条目)
将每个文件更改为键/值对数组

add
将这两个数组合并为一个

groupby(.key)
将数组的内容更改为多个数组,这些数组使用相同的键重新组合对象

map({key:([0].key),value:([[].value | add]))
将这些数组转换为一个对象,该对象具有一个键/值对,其键是原始键,值是具有该键的不同对象的合并值

from_entries
从键/值对象数组中重新创建对象