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

如何用JQ按users中的extId分组重复项并保留关联数据

按extId分组用户并合并关联connections的JQ实现

核心思路

用group_by(.extId)对用户数组分组,再遍历每个分组合并所有connections数据,避免像INDEX(.extId)那样自动去重。

示例输入JSON

{
  "users": [
    {
      "extId": "123",
      "name": "Alice",
      "connections": [{"id": "conn1"}]
    },
    {
      "extId": "123",
      "name": "Alice",
      "connections": [{"id": "conn2"}]
    },
    {
      "extId": "456",
      "name": "Bob",
      "connections": [{"id": "conn3"}]
    }
  ]
}

JQ命令实现

.users | group_by(.extId) | map({
  extId: .[0].extId,
  name: .[0].name, # 若同extId的name存在差异,可根据需求调整处理逻辑
  connections: map(.connections) | flatten
})

命令解释

  1. .users:提取顶层的users数组
  2. group_by(.extId):将users数组按extId字段分组,生成二维数组(每个子数组对应同一extId的所有用户)
  3. map(...):遍历每个分组,构造合并后的对象:
    • 取分组第一个元素的extId和基础字段(假设同extId的基础字段一致,若不一致可改为map(.name) | unique之类的逻辑)
    • map(.connections) | flatten:提取分组内所有用户的connections数组,再扁平化合并为一个数组

预期输出

[
  {
    "extId": "123",
    "name": "Alice",
    "connections": [{"id": "conn1"}, {"id": "conn2"}]
  },
  {
    "extId": "456",
    "name": "Bob",
    "connections": [{"id": "conn3"}]
  }
]

特殊场景处理(若同extId的用户基础字段有差异)

如果需要保留同一extId下的所有用户原始数据,同时合并connections,可改用以下命令:

.users | group_by(.extId) | map({
  extId: .[0].extId,
  users: .,
  connections: map(.connections) | flatten
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:52:37