如何使用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 } }
代码说明
变量处理:
targetTitle:提取payload中待更新的原标题值matchedSystemObj:从secondJson中过滤出code与原标题一致的系统对象updatedTitle:从匹配对象的crossRef数组中找到systemCode为SYS2的xrefValue,未找到匹配项时保留原标题
更新逻辑:
通过update操作符逐层修改payload的patient.title字段,替换为计算后的updatedTitle
期望输出
{ "patient": { "patientNumber": "123", "secondaryAltPatientIdentifier": "2222222", "title": "Mister", "preferredName": "test" } }
内容的提问来源于stack exchange,提问作者Nimesh Gayanga
相关产品推荐
相关产品推荐

