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
从键/值对象数组中重新创建对象