Mule 4中如何优化单元素列表的DataWeave 2.0映射?
如何在DataWeave 2.0中避免用索引[0]取单元素列表的值?
问题描述
我是Mule 4新手,现有如下输入Payload,其中employeeInfo为仅包含单个元素的列表。当前使用的DataWeave 2.0映射需通过索引[0]取值,请问是否有更优的转换方式以去除索引写法?
输入Payload
{ "id": "123", "result": "SUCCESS", "code": "200", "application": "api", "provider": "sql", "payload": { "employeeInfo": [ { "first_name": "kate", "last_name": "turner", "email": "kate.turner@gmail.com ", "phone_number": 1234567890, "hire_date": "2023-07-03", "job_id": 145, "employee_id": 987654, "manager_id": 365, "department_id": 3 } ] } }
现有DataWeave代码
%dw 2.0 output application/json --- "payload": { "employeeId": payload.payload.employeeInfo[0].employee_id, "firstName": payload.payload.employeeInfo[0].first_name, "lastName": payload.payload.employeeInfo[0].last_name, "EmailId": payload.payload.employeeInfo[0].email, "PhoneNumber": payload.payload.employeeInfo[0].phone_number, "HireDate": payload.payload.employeeInfo[0].hire_date }
最优解决方案
你可以使用DataWeave的first()函数替代索引[0],再结合变量存储简化代码,既去掉索引写法,又提升代码的可读性和维护性。
优化后的代码
%dw 2.0 output application/json // 提取列表首个元素存入变量,避免重复书写长路径 var employee = payload.payload.employeeInfo first --- "payload": { "employeeId": employee.employee_id, "firstName": employee.first_name, "lastName": employee.last_name, "EmailId": employee.email, "PhoneNumber": employee.phone_number, "HireDate": employee.hire_date }
补充说明
first()函数的作用是提取集合的第一个元素,效果和[0]完全一致,但语义更清晰,写法更简洁。- 如果需要处理
employeeInfo为空列表的边界情况,可以给first()添加default兜底,避免报错:
这样当列表为空时,会自动使用空对象作为默认值。var employee = payload.payload.employeeInfo first default {}
内容的提问来源于stack exchange,提问作者Sunny85
相关产品推荐
相关产品推荐

