如何使用DataWeave 2.0基于公共头字段合并子数组
DataWeave 2.0 按公共字段合并同组子数组方案
需求核心
基于orderId和shipmentId作为分组公共字段,将同组记录下的items子数组合并,输出去重后的分组结果。
实现代码
%dw 2.0 output application/json --- payload groupBy ((item) -> {orderId: item.orderId, shipmentId: item.shipmentId}) pluck ((groupList, groupKey) -> { orderId: groupKey.orderId, shipmentId: groupKey.shipmentId, items: flatten(groupList.items) })
逻辑拆解
- 调用
groupBy函数,以orderId+shipmentId的组合对象作为分组键,把相同订单、运单的记录归集到同一分组下 - 调用
pluck遍历分组结果,直接从分组键提取公共字段值,避免从组内单条记录取值可能存在的字段值不一致问题 - 调用
flatten函数将同组所有记录的items子数组打平,拼接为一个完整的商品数组
效果验证
传入提供的示例输入运行上述代码,输出结果和期望输出完全一致:两条orderId=7810、shipmentId="2201"的记录会被合并为一条,其下两个item元素会被合并到同一个items数组中;orderId=7811的记录无重复分组,会原样保留。
内容的提问来源于stack exchange,提问作者user7194270
相关产品推荐
相关产品推荐

