如何用jq合并含嵌套数组对象的JSON数组元素?
问题:合并JSON数组中接口的属性
原始输入JSON
[ { "interface": [ { "name": "ethernet-1/1", "ifindex": 16382 }, { "name": "ethernet-1/2", "ifindex": 49150 } ] }, { "interface": [ { "name": "ethernet-1/1", "admin-state": "disable" }, { "name": "ethernet-1/2", "admin-state": "disable" } ] } ]
期望输出JSON
[ { "interface": [ { "name": "ethernet-1/1", "admin-state": "disable", "ifindex": 16382 }, { "name": "ethernet-1/2", "admin-state": "disable", "ifindex": 49150 } ] } ]
尝试过add和group_by等方法但未成功,需要能处理任意数量顶层数组元素的解决方案。
解决方案:使用jq工具实现合并
可以用以下jq命令完成需求:
jq '[{interface: [.[].interface[]] | group_by(.name)[] | add}]' input.json
命令分解
.[].interface[]:遍历顶层数组的每个元素,提取所有interface子数组的项,得到一个包含所有接口对象的扁平数组group_by(.name):按name字段对接口对象分组,确保相同名称的接口归为一组[] | add:遍历每个分组,将组内的对象合并(add会整合所有不同的键,不会覆盖已有键,刚好匹配需求)[{interface: ...}]:将合并后的接口数组重新包装成目标结构的顶层数组
执行该命令后,就能得到符合要求的合并结果,且支持任意数量的顶层数组元素。
内容的提问来源于stack exchange,提问作者Roman Dodin
相关产品推荐
相关产品推荐

