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

如何使用JMESPATH从JSON中按name分组聚合同key的value列表

JMESPath按name字段分组聚合value数组方案

问题场景

给定输入JSON数组(已修正原示例的语法错误):

[
   {
      "name" : "a1",
      "value": null
   },
   {
      "name" : "a2",
      "value": 3
   },
   {
      "name" : "a1",
      "value": 4
   },
   {
      "name" : "a2",
      "value": 6
   }
]

需要通过单条JMESPath查询,将相同name的项聚合,输出如下结构:

[
    {
       "name": "a1",
       "value": [null, 4]
    },
    {
       "name": "a2",
       "value": [3, 6]
    }
]

此前尝试的分步提取name再过滤的方案需要多次查询,无法满足单条语句实现的要求。

可用查询语句

直接使用如下JMESPath即可得到目标结果:

[*].name | unique(@) | [*].{"name": @, "value": $parent[?name == @].value}

语句逻辑拆解

  • [*].name:遍历原始数组提取所有name字段值,得到初始name列表
  • unique(@):对name列表去重,得到最终的分组键集合["a1", "a2"]
  • 最后遍历每个分组键,构造新对象:
    • name字段赋值为当前遍历到的分组名
    • value字段从原始数组中筛选所有name等于当前分组名的项,提取其value值组成数组,会自动保留null值、保持原始出现顺序

*提示:如果使用的JMESPath实现不支持$parent上下文引用,可以使用全兼容写法,效果完全一致:

{"source": @, "group_keys": [*].name | unique(@)} | group_keys[*].{"name": @, "value": $root.source[?name == @].value}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:45:48