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

如何编写JSONata查询,按唯一job属性汇总issuesInJob值?

问题:按job去重汇总JSON数组中的issuesInJob值

简化后的JSON数组

[
  {
    "job":1,
    "issue":"red",
    "issuesInJob":50
  },
  {
    "job":1,
    "issue":"blue",
    "issuesInJob":50
  },
  {
    "job":2,
    "issue":"orange",
    "issuesInJob":20
  },
  {
    "job":2,
    "issue":"orange",
    "issuesInJob":20
  },
  {
    "job":3,
    "issue":"green",
    "issuesInJob":20
  }
]

数组说明

  • 数组包含不同编号的job,每个对象代表该job下的一种issue类型,同一job可能存在多个甚至重复的issue对象
  • issuesInJob是对应job的总issue数量,比如job 1的该值为50,意味着数组中有50个job:1的对象

预期输出

需要汇总所有job的issuesInJob值,每个job的数值仅统计一次(即使不同job的数值相同也要分别计入)。示例数组的求和结果应为:50 + 20 + 20 = 90

之前尝试对唯一的issuesInJob值求和,但因为不同job可能有相同值导致结果错误,且无法修改原数组结构,需基于现有结构实现需求。

JSONata解决方案

使用以下JSONata表达式即可实现需求:

sum($distinct($map($groupBy($, 'job'), function($v, $k) { $v[0].issuesInJob })))

表达式解释

  1. $groupBy($, 'job'):将数组按job字段分组,每个分组对应一个job的所有对象
  2. $map(..., function($v, $k) { $v[0].issuesInJob }):遍历每个分组,取分组中第一个对象的issuesInJob值(同一job的该值完全一致)
  3. $distinct(...):确保每个job的数值只保留一次(分组后已天然唯一,此步可作为兜底验证)
  4. sum(...):对处理后的唯一数值数组求和

也可以用更简洁的写法,直接遍历分组取对应值求和:

sum($each($groupBy($, 'job'), function($group) { $group[0].issuesInJob }))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:05:22