使用DataWeave 2.0基于条件读取JSON属性:非数组Payload处理
问题:单个员工离职状态判断的DataWeave脚本修正
背景信息
示例Payload
{ "Employees": { "Employee": { "EmpID": "JC01", "TerminationDate": "2021-03-15", "FirstName" :"XXXX", "LastName":"aaa" } } }
需求
判断EmpID为JC01的员工是否已离职:若TerminationDate早于当前日期,则判定为已离职。
原错误脚本
用户尝试使用数组函数filter和map,但因Employee是单个对象而非数组,执行失败:
%dw 2.0 output application/java --- (vars.pload.Employees.Employee filter(((if ( $.TerminationDate =='' ) '9999-01-01' else $.TerminationDate) as Date) < (now() as Date)) map($ - "TerminationDate") )
核心问题
Payload中的Employee是单个对象,而非数组,无法使用仅适用于数组的filter和map函数。
解决方案
直接通过条件判断处理单个对象即可,无需数组遍历函数。以下是修正后的脚本:
修正脚本
%dw 2.0 output application/java --- do { // 提取单个员工对象 var targetEmployee = vars.pload.Employees.Employee // 处理空终止日期:空值用远未来日期替代 var processedTermDate = if (targetEmployee.TerminationDate == "") "9999-01-01" else targetEmployee.TerminationDate // 判断是否已离职 var isAlreadyTerminated = (processedTermDate as Date) < (now() as Date) } // 满足条件则返回移除TerminationDate的员工数据,否则返回null(可按需调整返回值) if (isAlreadyTerminated) targetEmployee - "TerminationDate" else null
脚本说明
- 用
do块封装临时变量,让逻辑更清晰 - 直接针对单个员工对象做日期校验,无需数组操作
- 可根据实际需求调整返回值:比如只需要布尔结果的话,直接返回
isAlreadyTerminated即可
内容的提问来源于stack exchange,提问作者Ratha
相关产品推荐
相关产品推荐

