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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:55:19