如何在Mule 4中通过Foreach和DataWeave转换标识符数组
Mule 4 实现claimNumbers数组拆分及字段调整方案
实现思路
针对每个contactUpdateData对象,拆分其claimNumbers数组为独立的contactUpdateData条目:
- 数组首个元素:将
claimNumbers字段名改为cNumbers,同时把updateData.customer.customerType替换为abcde - 其余元素:保留原
claimNumbers字段名和customerType值,复用所有其他字段
结合Foreach组件的实现步骤
1. 配置Foreach组件
将Foreach的Collection设置为:payload.contactUpdateData,遍历每个原始的contactUpdateData对象。
2. 内部DataWeave转换(拆分并修改字段)
在Foreach内部添加Transform Message组件,使用以下DataWeave代码处理当前遍历的item:
%dw 2.0 output application/json --- payload.claimNumbers map ((num, index) -> payload - "claimNumbers" ++ { (if (index == 0) "cNumbers" else "claimNumbers"): num, updateData: payload.updateData ++ { customer: payload.updateData.customer ++ { customerType: if (index == 0) "abcde" else payload.updateData.customer.customerType } } } )
这段代码逻辑:
- 遍历当前item的
claimNumbers数组,每个元素生成新对象 - 移除原对象的
claimNumbers字段,根据索引判断添加cNumbers或保留claimNumbers - 针对
customerType,索引为0时替换为abcde,否则保留原值 - 复用原对象的
channel、updateData下的其他所有字段
3. 收集结果并组装输出
在Foreach组件的Target中设置变量(比如splitResults),选择Append to list模式,收集所有拆分后的对象。
最后添加Transform Message组件,将收集到的结果组装成最终输出结构:
%dw 2.0 output application/json --- { contactUpdateData: vars.splitResults flatMap $ }
使用flatMap是因为每个原始contactUpdateData拆分后会生成数组,需要将多维数组展平为一维。
直接用DataWeave实现(无需Foreach)
如果不需要依赖Foreach组件,也可以用一段DataWeave直接完成整个转换,效率更高:
%dw 2.0 output application/json --- { contactUpdateData: payload.contactUpdateData flatMap (item) -> item.claimNumbers map ((num, index) -> item - "claimNumbers" ++ { (if (index == 0) "cNumbers" else "claimNumbers"): num, updateData: item.updateData ++ { customer: item.updateData.customer ++ { customerType: if (index == 0) "abcde" else item.updateData.customer.customerType } } } ) }
内容的提问来源于stack exchange,提问作者Mulesoft Developer
相关产品推荐
相关产品推荐

