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

如何使用DataWeave 2.0限制无DTOSteps子节点的DTOCoverageItem更新

解决DataWeave 2.0中仅更新含DTOSteps子节点的DTOCoverageItem的FullTermAmt问题

要实现仅当DTOCoverageItem节点包含DTOSteps子节点时,才更新其FullTermAmt属性的需求,核心是在更新逻辑中增加节点存在性的判断。以下是修正后的DataWeave 2.0代码及说明:

修正后的代码示例

%dw 2.0
output application/json
// 假设请求中的更新值来自payload.request.FullTermAmt,可根据实际数据源调整
var targetFullTermAmt = payload.request.FullTermAmt
---
payload.target update {
    case coverageItems at .DTOCoverageItems -> 
        coverageItems map (item) -> 
            // 检查当前DTOCoverageItem是否存在DTOSteps子节点
            if (item.DTOSteps? ) 
                item update { case amt at .FullTermAmt -> targetFullTermAmt }
            else 
                item // 无DTOSteps时保持原节点不变
}

关键逻辑说明

  1. 节点存在性判断:使用item.DTOSteps?操作符检查当前DTOCoverageItem是否包含DTOSteps子节点,?是DataWeave中用于判断属性是否存在的原生语法。
  2. 条件更新:仅当判断为真时,执行FullTermAmt的赋值操作;不满足条件时直接返回原节点,避免误更新。
  3. 严格校验扩展:如果业务要求DTOSteps必须是非空数组,可将判断条件修改为:
    if (item.DTOSteps != null and sizeOf(item.DTOSteps) > 0)
    

输入输出示例

输入数据(目标结构+请求更新值)

{
  "target": {
    "DTOCoverageItems": [
      {
        "FullTermAmt": 100,
        "DTOSteps": [{"StepId": "S001"}]
      },
      {
        "FullTermAmt": 200
      },
      {
        "FullTermAmt": 300,
        "DTOSteps": []
      }
    ]
  },
  "request": {
    "FullTermAmt": 500
  }
}

输出结果(仅含DTOSteps的节点被更新)

{
  "target": {
    "DTOCoverageItems": [
      {
        "FullTermAmt": 500,
        "DTOSteps": [{"StepId": "S001"}]
      },
      {
        "FullTermAmt": 200
      },
      {
        "FullTermAmt": 500,
        "DTOSteps": []
      }
    ]
  }
}

若使用严格校验条件(排除空数组),第三个节点的FullTermAmt将保持300不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:06:29