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

如何使用Jsonata按srno、name分组聚合resources的projects列表?

按srno和name分组并合并projects的Jsonata表达式

需求

将输入JSON中resources数组的元素按srno和name字段分组,合并同一分组下的projects列表,同时保留无projects字段的条目。

输入JSON

{"resources":[{"srno":"1","name":"name1","projects":[{"prjname":"abc"}]},{"srno":"1","name":"name1","projects":[{"prjname":"def"}]},{"srno":"2","name":"name2","projects":[{"prjname":"abc"}]},{"srno":"4","name":"name4","projects":[{"prjname":"prq"}]},{"srno":"4","name":"name4","projects":[{"prjname":"stu"}]},{"srno":"4","name":"name4","projects":[{"prjname":"uvw"}]},{"srno":"5","name":"name5"}]}

目标输出JSON

{"resources":[{"srno":"1","name":"name1","projects":[{"prjname":"abc"},{"prjname":"def"}]},{"srno":"2","name":"name2","projects":[{"prjname":"abc"}]},{"srno":"4","name":"name4","projects":[{"prjname":"prq"},{"prjname":"stu"},{"prjname":"uvw"}]},{"srno":"5","name":"name5"}]}

Jsonata表达式

{
  "resources": $map(
    $groupBy(resources, function($v) { $v.srno & "|" & $v.name }),
    function($group, $key) {
      {
        "srno": $split($key, "|")[0],
        "name": $split($key, "|")[1],
        "projects": $flatten($group.projects)
      } ~> $filter(function($v, $k) { $exists($v) })
    }
  )
}

表达式说明

  • $groupBy(resources, function($v) { $v.srno & "|" & $v.name }):通过srno与name拼接的唯一键,对resources数组进行分组
  • $map(...):遍历每个分组,生成最终的结构化条目
  • $split($key, "|")[0]/[1]:从分组键中拆分出原始的srno和name值
  • $flatten($group.projects):将分组内所有projects子数组合并为一个扁平数组
  • ~> $filter(function($v, $k) { $exists($v) }):自动过滤不存在的字段(例如分组内无projects时,该字段会被移除)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:22:56