将DataWeave 1代码迁移至DataWeave 2,实现相同输出结果
DataWeave 1 到 DataWeave 2 迁移实现方案
输入示例
{ "employees": [ { "eId": "1", "email": "a@xyz.com", "uuid": null }, { "eId": "2", "email": "b@xyz.com", "uuid": "abcd" } ] }
预期输出
{ "results": [ { "eid": "1", "email": "a@xyz.com", "uuid": null, "uuid": "abcd" }, { "eid": "2", "email": "b@xyz.com", "uuidDetails": "abcd" } ] }
迁移后的DataWeave 2代码
%dw 2.0 output application/json --- results: payload.employees map (emp, index) -> { eid: emp.eId, email: emp.email, // 当uuid非空时,添加uuidDetails字段 (uuidDetails: emp.uuid) if (emp.uuid != null), // 当uuid为空时,生成所有员工的uuid键值对(允许重复键) (payload.employees map (item) -> { uuid: item.uuid }) if (emp.uuid == null) } flatten
代码说明
- 基础字段映射:完成
eid和email的常规字段转换,与原逻辑保持一致。 - 非空uuid处理:使用DataWeave 2的条件字段语法
(key: value) if (condition),当员工uuid不为null时,添加uuidDetails字段并赋值。 - 空uuid处理:当员工uuid为null时,通过
map遍历所有员工生成包含uuid键的对象,再用flatten将这些对象的键值对合并到当前结果对象中,生成重复的uuid键(对应输入中所有员工的uuid值)。 - flatten的作用:确保合并后的键值对直接成为结果对象的一部分,而非嵌套结构,对应原DataWeave 1中括号包裹表达式的特殊行为。
内容的提问来源于stack exchange,提问作者boomslaw
相关产品推荐
相关产品推荐

