You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:30:30