Mule 4.4中使用DataWeave 2.x将CSV来源的数组对象转换为嵌套数组对象的实现方法
Mule 4.4中使用DataWeave 2.x将CSV来源的数组对象转换为嵌套数组对象的实现方法
我来帮你搞定这个DataWeave转换需求!你需要把从CSV读取到的扁平订单明细数组,按照sold和soNo这两个唯一标识进行分组,把同属一个订单的sku和qty整理成嵌套的items数组,对吧?
直接上可以实现的DataWeave脚本:
%dw 2.0 output application/json --- // 第一步:按sold和soNo组合键分组,聚合同订单的明细 payload groupBy ((item) -> { sold: item.sold, soNo: item.soNo }) // 第二步:将分组后的键值对对象转换为数组 pluck ((groupedItems, groupKey) -> { // 提取订单头部信息:sold、soNo直接用分组键的值,org取分组中第一个元素的(同订单org应该一致) sold: groupKey.sold, soNo: groupKey.soNo, org: groupedItems[0].org, // 第三步:将每个明细项转换为items数组的元素 items: groupedItems map ((item) -> { sku: item.sku, qty: item.qty }) })
关键步骤解释:
groupBy分组:用sold和soNo组成的对象作为分组键,把所有同订单的明细项聚合到一起,这一步会返回一个以分组键为key、对应明细数组为value的对象。pluck转数组:因为groupBy返回的是对象,我们需要用pluck把它转换成我们需要的数组格式。- 构建最终结构:每个分组里,我们从分组键直接获取
sold和soNo(避免重复读取数组元素),org取分组第一个元素的(假设同一订单的org都是相同的),然后用map把每个明细项提取出sku和qty,组成items数组。
注意事项:
你提供的示例数据里有语法错误:所有的"soNo": "so001'都少了一个闭合的双引号,应该修正为"soNo": "so001",否则DataWeave会解析失败哦。
备注:内容来源于stack exchange,提问作者maomifadacai
相关产品推荐
相关产品推荐

