DataWeave如何过滤动态键员工数组,筛选Resigned/Terminated状态条目
DataWeave 动态键员工数据过滤实现方案
核心思路
无需关心每个外层对象的动态UUID键名,直接通过获取对象值的方式提取员工数组,按状态过滤后拍平为要求的员工对象数组即可。
基础实现代码(适配当前输入结构)
%dw 2.0 output application/json --- payload flatMap (item) -> // 提取当前动态键对应的员工数组(每个外层对象仅1个键值对,无需关心键名) valuesOf(item)[0] // 过滤保留指定状态的员工条目 filter ((emp) -> emp.Employeestatus == "Resigned" or emp.Employeestatus == "Terminated")
兼容多键场景的扩展版本
如果后续可能出现单个外层对象存在多个动态键的情况,可使用该版本自动合并所有键对应的员工数组:
%dw 2.0 output application/json --- payload flatMap (item) -> // 提取当前对象所有动态键对应的员工数组并拍平 flatten(valuesOf(item)) filter ((emp) -> emp.Employeestatus == "Resigned" or emp.Employeestatus == "Terminated")
逻辑说明
- 用
flatMap遍历外层数组的每个动态键对象,自动拍平内层数组,避免最终输出嵌套结构 - 用
valuesOf()方法直接获取对象所有键对应的值集合,完全绕开动态键的命名问题,不需要写固定键路径 - 直接对提取到的员工对象做状态匹配,状态为Active的条目会被直接过滤
- 最终输出为扁平化的员工对象数组,完全匹配期望的输出结构
提示:如果需要兼容大小写不敏感的状态匹配,可将严格匹配运算符
==替换为DataWeave宽松匹配运算符~=。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

