如何在Mule 4中用DataWeave 2.0迭代对象内数组并关联字段
DataWeave 2.0 实现两个数组字段整合
你可以通过关联匹配字段(这里是ORGANIZATION和EFFDT)来将两个数组的内容合并。以下是针对需求的具体实现方案:
输入JSON
{ "ABC_TBL": [{ "ORGANIZATION": "CAMBRIDGE", "PROG_CODE": "L9999", "EFFDT": "2022-01-01" }, { "ORGANIZATION": "CAMBRIDGE", "PROG_CODE": "L9999", "EFFDT": "2023-01-01" } ], "XYZ_TBL": [{ "PROG_DESC": "Artificial Intelligence", "RAS_ID": "", "CONTACT_SPOC": 0, "ORGANIZATION": "CAMBRIDGE", "EFFDT": "2022-01-01" }, { "PROG_DESC": "Artificial Intelligence", "RAS_ID": "", "CONTACT_SPOC": 0, "ORGANIZATION": "CAMBRIDGE", "EFFDT": "2023-01-01" } ] }
DataWeave 2.0 基础脚本
%dw 2.0 output application/json --- payload.ABC_TBL map (abcItem) -> { Organization: abcItem.ORGANIZATION, Academic_program: abcItem.PROG_CODE, Date_Start: abcItem.EFFDT, description: (payload.XYZ_TBL filter (xyzItem) -> xyzItem.ORGANIZATION == abcItem.ORGANIZATION and xyzItem.EFFDT == abcItem.EFFDT ).PROG_DESC[0] }
脚本说明
- 用
map遍历ABC_TBL的每一项 - 对每个
abcItem,通过filter在XYZ_TBL中筛选出ORGANIZATION和EFFDT完全匹配的条目 - 提取匹配条目的
PROG_DESC字段(取第一个匹配值,适配示例中唯一匹配的场景) - 同步完成字段重命名(如
ORGANIZATION→Organization)
输出结果
[ { "Organization": "CAMBRIDGE", "Academic_program": "L9999", "Date_Start": "2022-01-01", "description": "Artificial Intelligence" }, { "Organization": "CAMBRIDGE", "Academic_program": "L9999", "Date_Start": "2023-01-01", "description": "Artificial Intelligence" } ]
性能优化版脚本
如果XYZ_TBL数据量较大,或存在多匹配场景,建议先将XYZ_TBL转换为键值对映射,避免遍历重复执行筛选:
%dw 2.0 output application/json var xyzMap = payload.XYZ_TBL groupBy ((item) -> item.ORGANIZATION ++ "|" ++ item.EFFDT) --- payload.ABC_TBL map (abcItem) -> { Organization: abcItem.ORGANIZATION, Academic_program: abcItem.PROG_CODE, Date_Start: abcItem.EFFDT, description: xyzMap[abcItem.ORGANIZATION ++ "|" ++ abcItem.EFFDT][0].PROG_DESC default "" }
该版本先按ORGANIZATION+EFFDT组合分组XYZ_TBL,遍历ABC_TBL时直接通过键取值,执行效率更高。
内容的提问来源于stack exchange,提问作者Mule_Developer
相关产品推荐
相关产品推荐

