如何使用jq合并两个对象中指定键对应的数组?
用jq合并两个对象的指定数组字段
没问题,这在jq里实现起来很灵活,根据你对其他键的不同需求,我给你几种实用方案:
方案1:保留第一个对象的所有其他键,仅合并"a"数组
如果你希望保留第一个对象的其他键(第二个对象的其他键直接忽略),只把两个对象的"a"数组合并,可以用这个命令:
jq -n 'input as $first | input as $second | $first | .a += $second.a'
示例:
输入第一个对象:
{ "a": [ "1-1", "1-2" ], "b": "original-value" }
输入第二个对象:
{ "a": [ "2-1", "2-2", "2-3" ], "c": "ignore-this" }
输出结果:
{ "a": [ "1-1", "1-2", "2-1", "2-2", "2-3" ], "b": "original-value" }
方案2:合并两个对象的所有键,同时合并"a"数组
如果你想保留两个对象的所有键(重复的键会用第二个对象的值覆盖第一个),并且合并"a"数组,可以这样写:
jq -n 'input as $first | input as $second | $first + $second | .a = ($first.a + $second.a)'
示例:
用上面同样的输入,输出结果会包含两个对象的所有非"a"键:
{ "a": [ "1-1", "1-2", "2-1", "2-2", "2-3" ], "b": "original-value", "c": "ignore-this" }
可选:去重合并后的数组
如果你的"a"数组可能存在重复元素,想要合并后自动去重,可以在合并后加上unique过滤:
jq -n 'input as $first | input as $second | $first | .a = ($first.a + $second.a | unique)'
从文件读取输入
如果你的两个对象分别存在两个JSON文件(比如obj1.json和obj2.json),只需要把文件名加到命令末尾即可:
jq -n 'input as $first | input as $second | $first | .a += $second.a' obj1.json obj2.json
内容的提问来源于stack exchange,提问作者xaxa
相关产品推荐
相关产品推荐

