You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

代码说明

  1. 基础字段映射:完成eid和email的常规字段转换,与原逻辑保持一致。
  2. 非空uuid处理:使用DataWeave 2的条件字段语法(key: value) if (condition),当员工uuid不为null时,添加uuidDetails字段并赋值。
  3. 空uuid处理:当员工uuid为null时,通过map遍历所有员工生成包含uuid键的对象,再用flatten将这些对象的键值对合并到当前结果对象中,生成重复的uuid键(对应输入中所有员工的uuid值)。
  4. flatten的作用:确保合并后的键值对直接成为结果对象的一部分,而非嵌套结构,对应原DataWeave 1中括号包裹表达式的特殊行为。

内容的提问来源于stack exchange,提问作者boomslaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:25:59