MuleSoft DataWeave按uniqueID聚合同字段错误信息方案咨询
DataWeave 按uniqueID分组拼接同字段错误信息实现方案
先给出符合业务场景的模拟输入示例,方便对照逻辑验证:
[ { "uniqueID": "REQ001", "result": "failure", "Base Rate": "数值不能小于0", "Closing Cost": "格式不合法" }, { "uniqueID": "REQ001", "result": "failure", "Base Rate": "超出当前业务允许范围", "Loan Term": "期限不符合准入要求" }, { "uniqueID": "REQ002", "result": "success", "Base Rate": "5.2%" }, { "uniqueID": "REQ002", "result": "failure", "Closing Cost": "未上传凭证" } ]
对应模拟输入的预期输出效果:
[ { "uniqueID": "REQ001", "Base Rate": "数值不能小于0|超出当前业务允许范围", "Closing Cost": "格式不合法", "Loan Term": "期限不符合准入要求" }, { "uniqueID": "REQ002", "Closing Cost": "未上传凭证" } ]
实现代码(DataWeave 2.0 优化写法)
%dw 2.0 output application/json --- // 过滤失败记录+按uniqueID分组 payload filter ($.result == "failure") groupBy $.uniqueID mapObject ((groupItems, groupId) -> { uniqueID: groupId, // 拉平所有业务字段、按字段名分组拼接 (flatten(groupItems pluck $ -- ["uniqueID", "result"]) groupBy $$ mapObject ((values, field) -> (field): values joinBy "|")) }) // 转为目标数组格式 pluck $
逻辑说明
- 全程适配动态字段场景,不需要提前硬编码
Base Rate/Closing Cost等字段名,新增业务字段自动适配 - 自动过滤所有
result不为failure的记录,不参与后续计算 - 同
uniqueID下同名字段的错误信息自动按出现顺序用|拼接,不会生成重复字段 - 兼容分组内单条/多条错误记录的场景,单条记录不会生成多余拼接符号
可选优化
如果需要过滤同字段下的空错误信息,可以在joinBy之前加过滤逻辑,修改对应行即可:
groupBy $$ mapObject ((values, field) -> (field): (values filter $ != "") joinBy "|"))
内容的提问来源于stack exchange,提问作者Mule-Newbie
相关产品推荐
相关产品推荐

