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

Mule 4 DataWeave 2.0:如何用动态键访问groupBy分组对象?

解决方案:DataWeave中动态访问分组后的对象键

问题核心

  1. 分组后的键为数字类型(rollNumber字段的值是数字),但studentsToCheck中的学号是字符串类型,类型不匹配导致无法匹配对应键。
  2. 动态访问对象属性时,不能使用点语法(.),必须用方括号语法([])来引用动态变量。

完整解决代码

%dw 2.0
output application/json 
var studentsGroupedByRollNumbers = payload groupBy ((item) -> item.rollNumber)
var studentsToCheck = ["123","543"]
---
studentsToCheck map ((rollStr) -> {
    rollNumber: rollStr as Number,
    studentRecords: studentsGroupedByRollNumbers[rollStr as Number],
    totalMarks: studentsGroupedByRollNumbers[rollStr as Number] reduce ((item, acc) -> acc + item.marks)
})

关键说明

  • 类型统一:把studentsToCheck中的字符串学号转为数字(rollStr as Number),和分组结果的键类型保持一致,才能正确匹配。
  • 动态键取值:用方括号studentsGroupedByRollNumbers[rollStr as Number]替代点语法,实现动态键的访问。
  • 聚合示例:如果需要对分组后的学生数据做计算(比如总分),可以直接在map里对获取到的学生数组执行reduce操作。

输出结果

[
  {
    "rollNumber": 123,
    "studentRecords": [
      {
        "name": "ABC",
        "rollNumber": 123,
        "subject": "Maths",
        "marks": 80
      },
      {
        "name": "ABC",
        "rollNumber": 123,
        "subject": "ENG",
        "marks": 87
      }
    ],
    "totalMarks": 167
  },
  {
    "rollNumber": 543,
    "studentRecords": [
      {
        "name": "REW",
        "rollNumber": 543,
        "subject": "Maths",
        "marks": 80
      }
    ],
    "totalMarks": 80
  }
]

内容的提问来源于stack exchange,提问作者Bibek Kr. Bazaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:25:53