如何用MuleSoft DataWeave过滤AreaId不匹配所有SchoolId的数组对象
MuleSoft DataWeave脚本:筛选AreaId不匹配所有SchoolId的元素
需求说明
输入为包含学校信息的JSON数组,需筛选出AreaId与数组中所有对象的SchoolId均不匹配的元素。
输入示例
[ { "schoolName": "ABC", "SchoolId": "3444444", "AreaId": "2334555", "Number": "100" }, { "schoolName": "ABC", "SchoolId": "77655444", "AreaId": "3444444", "Number": "100" }, { "schoolName": "ABC", "SchoolId": "456666", "AreaId": "77655444", "Number": "100" }, { "schoolName": "ABC", "SchoolId": "2334555", "AreaId": "555555", "Number": "100" } ]
输出示例
[ { "schoolName": "ABC", "SchoolId": "2334555", "AreaId": "555555", "Number": "100" } ]
注:输出示例中的SchoolId疑似笔误,实际筛选结果应保留输入中对应元素的原始SchoolId值
DataWeave解决方案
%dw 2.0 output application/json --- // 提取所有SchoolId并转为集合,优化查找效率 var allSchoolIds = payload.SchoolId as Set<String> // 过滤出AreaId不在所有SchoolId集合中的元素 payload filter ((item) -> !(item.AreaId in allSchoolIds))
逻辑说明
- 提取SchoolId集合:通过
payload.SchoolId获取数组中所有SchoolId的值,转为Set<String>类型——集合的唯一性特性可避免重复值干扰,同时in操作在集合上的执行效率优于数组。 - 筛选目标元素:使用
filter函数遍历输入数组,判断当前元素的AreaId是否不在allSchoolIds集合中,仅保留符合条件的元素。
内容的提问来源于stack exchange,提问作者Rohitbit00
相关产品推荐
相关产品推荐

