问题描述
我有2个JSON文件,我想根据另一个更新其中一个。 更具体地说,如果文件中的特定key:value对匹配,我想更新另一个(也只有另外1个)key:value对。
a.json如下所示:
[
{"i":"1234","f":"123","a":"0"},{"i":"1235",{"i":"1236",{"i":"1237",{"i":"1238","a":"0"}
]
b.json看起来如下:
[
{"i":"1234","f":"555","a":"1"},"a":"1"}
]
我想更新b.json,以便如果b.json的“ i”值与a.json的“ i”值匹配,则“ f”的值将替换为a.json的值。即我希望b.json看起来像这样:
[
{"i":"1234","a":"1"}
]
请注意,仅必须替换f值,而不是a的值。
我已经找到了部分解决方案:
reduce keys[] as $k (.; if $a|has($k) then .[$k] = $a[$k] else . end)
2)运行:
jq --argfile a a.json -f a.jq b.json
这给了我f和a都已更新的信息,但我只想更新f。如何确保只有f被更新?
[
{"i":"1234","a":"0"}
]
解决方法
更正输入文件后,可以使用以下方法获得所需的结果:
jq --argfile a a.json -f program.jq b.json
program.jq所在的位置:
(INDEX($a[]; .i) | map_values(.f)) as $dict
| map( .f = $dict[.i] )