我有第一个 json 结构。 所有值始终为空。
{
"A": {
"A1": {
"A11": null,
"A12": null
}
},
"B": {
"B1": {
"B12": null
},
"B2": null
},
"C": {
"C1": {
"C11": null,
"C12": null
},
"C2" : {
"C21": {
"C211": null
}
}
}
}
在第二个 json 结构中,所有值始终都是字符串。
{
"A": {
"A1": {
"A11": "valueA11",
}
},
"B": {
"B1": {
"B12": "valueB12",
"B13": "valueB13"
},
"B2": "valueB2"
},
"C": "valueC"
}
结果将是:
{
"A": {
"A1": {
"A11": "valueA11",
"A12": null
}
},
"B": {
"B1": {
"B12": "valueB12"
},
"B2": "valueB2"
},
"C": {
"C1": {
"C11": null,
"C12": null
},
"C2" : {
"C21": {
"C211": null
}
}
}
}
如果第二个 json 中存在键,如何用第二个 json 中的值填充第一个 json 键,否则我们保留空值
我在 bash 上尝试过使用 jq 但没有成功。我已准备好使用任何可以完成这项工作的工具。
您可以使用
JOIN
将 tostream
和 reduce
收集的所有叶路径折叠到输出文档中:
jq -s '
map([tostream | select(has(1))] | INDEX(first|@json))
| reduce JOIN(last; first|to_entries[]; .key; [first.value[0], last[1]])
as [$p,$v] (null; setpath($p;$v))
' first.json second.json
{
"A": {
"A1": {
"A11": "valueA11",
"A12": null
}
},
"B": {
"B1": {
"B12": "valueB12"
},
"B2": "valueB2"
},
"C": {
"C1": {
"C11": null,
"C12": null
},
"C2": {
"C21": {
"C211": null
}
}
}
}