You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

命令分解

  1. .[].interface[]:遍历顶层数组的每个元素,提取所有interface子数组的项,得到一个包含所有接口对象的扁平数组
  2. group_by(.name):按name字段对接口对象分组,确保相同名称的接口归为一组
  3. [] | add:遍历每个分组,将组内的对象合并(add会整合所有不同的键,不会覆盖已有键,刚好匹配需求)
  4. [{interface: ...}]:将合并后的接口数组重新包装成目标结构的顶层数组

执行该命令后,就能得到符合要求的合并结果,且支持任意数量的顶层数组元素。


内容的提问来源于stack exchange,提问作者Roman Dodin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:36:07