Mule 4 DataWeave 2.0:如何用动态键访问groupBy分组对象?
解决方案:DataWeave中动态访问分组后的对象键
问题核心
- 分组后的键为数字类型(
rollNumber字段的值是数字),但studentsToCheck中的学号是字符串类型,类型不匹配导致无法匹配对应键。 - 动态访问对象属性时,不能使用点语法(
.),必须用方括号语法([])来引用动态变量。
完整解决代码
%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
相关产品推荐
相关产品推荐

