我在 2 个变量 V1 和 V2 中有 2 个 json 对象。
V1 是
{
"Parameters: {
"a": "value-of-a",
"b": "value-of-b"
}
}
V2是{
"Parameters": {
"a": "new-value-of-a",
"c": "value-of-c"
}
}
我想用 V2 的值覆盖 V1 的值。我想生成一个新的 JSON,如下所示:预期
{
"Parameters": {
"a": "new-value-of-a",
"b": "value-of-b"
}
}
我尝试了以下方法:(
echo '{ "Parameters": { "a": "value-of-a", "b": "value-of-b" } }'\
'{ "Parameters": { "a": "new-value-of-a", "c": "value-of-c" } }'\
| jq --slurp 'reduce .[] as $item ({}; . * $item)'
)
但这会产生实际
{
"Parameters": {
"a": "new-value-of-a",
"b": "value-of-b",
"c": "value-of-c"
}
}
问题是我不希望 V1 中不存在的 V2 中的节点出现在结果中。谁能帮我?
最佳答案
这是一个概念上简单且可扩展的无减少解决方案:
jq -n '
# Emit the object with key-value pairs of $o2
# for keys that appear in both . and $o2
def commonKeys($o2):
keys_unsorted as $k1
| ($o2|keys_unsorted) as $k2
| [($k1 - ($k1-$k2))[] | {(.): $o2[.]}] | add
;
input.Parameters as $dict
| input
| .Parameters |= (. + commonKeys($dict))
' v2.json v1.json
关于json - 使用 jq 合并 2 个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64052172/