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

如何使用DataWeave根据另一个JSON的匹配规则更新JSON字段值?

使用DataWeave实现标题值的匹配更新

需求说明

根据secondJson中的映射规则更新payload的title字段:

  • 当payload.patient.title的值与secondJson.masterObjectValues[0].systemObjectValues中的某个code匹配时
  • 将title替换为该code对应crossRef数组里,systemCode等于SYS2的xrefValue

输入数据

payload

{
"patient": {
"patientNumber": "123",
"secondaryAltPatientIdentifier": "2222222",
"title": "Mr.",
"preferredName": "test"
}
}

secondJson

{
  "objectCode": "Title",
  "masterObjectValues": [
    {
      "systemCode": "MASTER",
      "systemObjectValues": [
        {
          "codeId": "a5G9p0000001HwTEAU",
          "code": "Dr.",
          "crossRef": [
            {
              "systemCode": "BBS",
              "xrefValue": "DR"
            },
            {
              "systemCode": "NAVSYD",
              "xrefValue": "DR"
            }
          ]
        },
        {
          "codeId": "a5G9p0000001HurEAE",
          "code": "Mr.",
          "crossRef": [
            {
              "systemCode": "BBS",
              "xrefValue": "MR"
            },
            {
              "systemCode": "SYS2",
              "xrefValue": "Mister"
            }
          ]
        }
      ]
    }
  ]
}

DataWeave实现代码

%dw 2.0
output application/json
var targetTitle = payload.patient.title
// 筛选出与原标题匹配的系统对象
var matchedSystemObj = secondJson.masterObjectValues[0].systemObjectValues filter ($.code == targetTitle) 
// 获取对应SYS2的xrefValue,无匹配则保留原标题
var updatedTitle = if (sizeOf(matchedSystemObj) > 0) 
                      matchedSystemObj[0].crossRef filter ($.systemCode == "SYS2")[0].xrefValue default targetTitle 
                   else 
                      targetTitle
---
payload update {
    case patient at .patient -> patient update {
        case title at .title -> updatedTitle
    }
}

代码说明

  1. 变量处理:

    • targetTitle:提取payload中待更新的原标题值
    • matchedSystemObj:从secondJson中过滤出code与原标题一致的系统对象
    • updatedTitle:从匹配对象的crossRef数组中找到systemCode为SYS2的xrefValue,未找到匹配项时保留原标题
  2. 更新逻辑:
    通过update操作符逐层修改payload的patient.title字段,替换为计算后的updatedTitle

期望输出

{
"patient": {
"patientNumber": "123",
"secondaryAltPatientIdentifier": "2222222",
"title": "Mister",
"preferredName": "test"
}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:17:25