如何在DataWeave 2.0中按两个字段执行groupBy分组?
在DataWeave 2.0中按customer和orderid双字段分组并转换结构
输入数据
[ { "item": 621, "orderid": "ON22", "qty": 45.0, "customer": "813", "date": "1988-08-13" }, { "item": 63, "orderid": "ON22", "qty": 7, "customer": "813", "date": "2001-08-13" }, { "item": 54, "orderid": "AD546", "qty": 9, "customer": "813", "date": "2014-08-13" }, { "item": 611, "orderid": "ON222723-JH", "qty": 78.0, "customer": "890", "date": "1990-05-11" } ]
期望输出
[ { "customer":"890", "orderid":"ON222723-JH", "data":[ { "item":611, "qty":78.0, "date":"1990-05-11" } ] }, { "customer":"813", "orderid":"ON22", "data":[ { "item":621, "qty":45.0, "date":"1988-08-13" }, { "item": 63, "qty": 7, "date": "2001-08-13" } ] }, { "customer":"813", "orderid":"AD546", "data":[ { "item": 54, "qty": 9, "date": "2014-08-13" } ] } ]
解决方案
使用DataWeave 2.0的groupBy函数实现双字段分组,再通过pluck和map转换为目标结构:
%dw 2.0 output application/json --- payload groupBy ((item) -> { customer: item.customer, orderid: item.orderid }) pluck ((value, key) -> { customer: key.customer, orderid: key.orderid, data: value map ((item) -> item - "customer" - "orderid") })
代码说明
- 分组逻辑:用
customer和orderid组合成对象作为分组键,将原始数组按此键分组为键值对集合; - 结构转换:
pluck提取所有分组的键与对应数据;- 从分组键中取出
customer和orderid作为顶层字段; - 对分组内的每条数据,移除
customer和orderid字段后,组成data数组。
内容的提问来源于stack exchange,提问作者james11
相关产品推荐
相关产品推荐

