Mule 4 DataWeave按serviceType分组转换数据的技术问询
Mule 4 DataWeave 按serviceType分组并计算汇总值的正确实现
示例输入
[ { "serviceType": "A", "amount": 100, "date": "2024-01-01" }, { "serviceType": "A", "amount": 200, "date": "2024-01-02" }, { "serviceType": "B", "amount": 150, "date": "2024-01-03" } ]
正确DataWeave代码
%dw 2.0 output application/json --- payload groupBy ((item, index) -> item.serviceType) mapObject ((value, key, index) -> { (key): { totalAmount: sum(value.amount), history: value } })
示例输出
{ "A": { "totalAmount": 300, "history": [ { "serviceType": "A", "amount": 100, "date": "2024-01-01" }, { "serviceType": "A", "amount": 200, "date": "2024-01-02" } ] }, "B": { "totalAmount": 150, "history": [ { "serviceType": "B", "amount": 150, "date": "2024-01-03" } ] } }
代码说明
- 分组操作:通过
groupBy将原数组按serviceType字段分组,得到一个键为serviceType、值为对应同类型记录数组的临时对象。 - 结构重构:用
mapObject遍历每个分组,对每个分组做两项处理:- 计算该组的汇总值(示例中为
amount字段的总和,可根据实际需求替换为其他字段或计算逻辑) - 将分组内的原始记录存入
history数组
- 计算该组的汇总值(示例中为
- 动态键名:使用
(key)语法保留原serviceType作为输出对象的键名,确保结构符合需求。
常见错误排查
- 仅使用
groupBy未做后续转换:直接返回分组结果只会得到键值对形式的分组数组,无法生成包含汇总值的目标结构。 - 汇总计算路径错误:需使用分组后的
value对象访问组内字段(如value.amount),而非原payload。 - 结构映射错误:未用
mapObject遍历分组对象,导致无法为每个分组生成包含汇总和历史记录的嵌套结构。
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

