我有两个JSON对象:
{
"parameter1": "object1",
"childs": [
{
"id": "child1",
"parameter-A": "value-A"
}
]
}
和
{
"parameter2": "object2",
"childs": [
{
"id": "child1",
"parameter-B": "value-B"
}
]
}
我需要合并对象,但我不想让包含的数组被替换,但也要合并,即在id等于的情况下添加。这就是我需要的:
{
"parameter1": "object1",
"parameter2": "object2",
"childs": [
{
"id": "child1",
"parameter-A": "value-A",
"parameter-B": "value-B"
}
]
}
我目前将这两个文件与jq -s '.[0] * .[1]' file1 file2
合并,但参数-A被参数-B覆盖,其中包含缺少参数-A的不需要的结果:
{
"parameter1": "object1",
"parameter2": "object2",
"childs": [
{
"id": "child1",
"parameter-B": "value-B"
}
]
}
如果可以简化解决方案,我也可以更改JSON结构。
答案 0 :(得分:0)
我认为,以下过滤器将在已呈现的特定情况下产生预期结果,但一般要求不清楚,因此可能需要相应地进行调整:
def add_merge($one; $two):
def pairwise_add:
transpose
| map(if .[0].id == .[1].id then add else . end);
reduce ($one|keys_unsorted[]) as $k ($one+$two;
if ($one[$k]|type) == "array"
then .[$k] = ([$one[$k], $two[$k]] | pairwise_add)
else .
end);
对于给定的一对对象,结果是:
{
"parameter1": "object1",
"childs": [
{
"id": "child1",
"parameter-A": "value-A",
"parameter-B": "value-B"
}
],
"parameter2": "object2"
}