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

使用DataWeave转换Salesforce JSON为指定格式,支持__c/__r字段动态映射

DataWeave JSON转换实现方案

输入数据

{"records" : {
    "a1e1X00000Ly5GfQAJ" : {
      "apiName" : "SP_Equipment__c",
      "childRelationships" : { },
      "eTag" : "488cbd9fb3c67e20dbaac386ee2a49aa",
      "fields" : {
        "RecordType" : {
          "displayValue" : "Product",
          "value" : {
            "apiName" : "RecordType",
            "childRelationships" : { },
            "eTag" : "69f1f78c0422f456b554c7e2f2f481c0",
            "fields" : {
              "Id" : {
                "displayValue" : null,
                "value" : "0121X0000036fjzQAA"
              },
              "Name" : {
                "displayValue" : "Product",
                "value" : "Product"
              }
            },
            "id" : "0121X0000036fjzQAA",
            "lastModifiedById" : "00509000002pidBAAQ",
            "lastModifiedDate" : "2021-10-29T08:29:32.000Z",
            "recordTypeId" : null,
            "recordTypeInfo" : null,
            "systemModstamp" : "2021-10-29T08:29:32.000Z",
            "weakEtag" : 1635496172000
          }
        },
        "RecordTypeId" : {
          "displayValue" : null,
          "value" : "0121X0000036fjzQAA"
        },
        "SP_End_of_Commissioning__c" : {
          "displayValue" : null,
          "value" : null
        },
        "SP_End_of_External_Warranty__c" : {
          "displayValue" : null,
          "value" : null
        },
        "SP_Main_Product_Group__c" : {
          "displayValue" : null,
          "value" : "a1j1X000001opfqQAA"
        },
        "SP_Main_Product_Group__r" : {
          "displayValue" : "Motors HV Loher Tube Cooled (Ex flameproof)",
          "value" : {
            "apiName" : "SP_Product_Group__c",
            "childRelationships" : { },
            "eTag" : "3e30fe6b4f1ced0d9d31e9b188ea1ad9",
            "fields" : {
              "Id" : {
                "displayValue" : null,
                "value" : "a1j1X000001opfqQAA"
              },
              "Name" : {
                "displayValue" : null,
                "value" : "Motors HV Loher Tube Cooled (Ex flameproof)"
              }
            },
            "id" : "a1j1X000001opfqQAA",
            "lastModifiedById" : "0051X0000093craQAA",
            "lastModifiedDate" : "2021-10-07T08:10:14.000Z",
            "recordTypeId" : "012000000000000AAA",
            "recordTypeInfo" : null,
            "systemModstamp" : "2021-10-07T08:10:14.000Z",
            "weakEtag" : 1633594214000
          }
        },
        "SP_Number__c" : {
          "displayValue" : null,
          "value" : "10186735"
        },
        "SP_Product_Number__c" : {
          "displayValue" : null,
          "value" : "1MV4567-6BJ60-4BD0-Z"
        },
        "SP_Serial_Number__c" : {
          "displayValue" : null,
          "value" : "LDX/50000479"
        }
      },
      "id" : "a1e1X00000Ly5GfQAJ",
      "lastModifiedById" : "0051X000008s3oDQAQ",
      "lastModifiedDate" : "2021-11-08T13:39:23.000Z",
      "recordTypeId" : "0121X0000036fjzQAA",
      "recordTypeInfo" : {
        "available" : true,
        "defaultRecordTypeMapping" : true,
        "master" : false,
        "name" : "Product",
        "recordTypeId" : "0121X0000036fjzQAA"
      },
      "systemModstamp" : "2021-11-08T13:39:23.000Z",
      "weakEtag" : 1636378763000
    }
 }}

转换规则

  • 若存在abcd__c字段,同时存在对应的abcd__r字段,则abcd__c的取值替换为abcd__r的内容,输出结果不保留所有__r后缀的字段
  • RecordType的名称值映射到RecordTypeId字段,输出结果不保留独立的RecordType字段

示例规则说明:

示例输入

{ 
  "abcd__c": "A001",
  "abcd__r": "A002"
} 

示例输出

{ "abcd__c": "A002" }

期望输出结果

{
  "RecordTypeId": "Product",
  "SP_End_of_Commissioning__c": null,
  "SP_End_of_External_Warranty__c": null,
  "SP_Main_Product_Group__c": "Motors HV Loher Tube Cooled (Ex flameproof)",
  "SP_Number__c": "10186735",
  "SP_Product_Number__c": "1MV4567-6BJ60-4BD0-Z",
  "SP_Serial_Number__c": "LDX/50000479"
}

实现代码

%dw 2.0
output application/json
// 动态获取records下的第一个业务对象的fields,无需写死ID
var rawFields = payload.records.*[0].fields
// 预处理所有字段,提取对应取值
var preProcess = rawFields mapObject (val, key) -> {
    (key): if (key endsWith "__r") val.displayValue
           else if (key == "RecordType") val.displayValue
           else if (key endsWith "__c" or key == "RecordTypeId") val.value
           else null
}
// 按规则生成最终结果
var finalResult = preProcess 
  // 过滤掉不需要保留的字段
  filterObject ((val, key) -> !(key endsWith "__r" or key == "RecordType"))
  // 替换映射字段的取值
  mapObject (val, key) -> {
    (key): if (key endsWith "__c" and preProcess[(key[0 to -4] ++ "__r")]?) preProcess[(key[0 to -4] ++ "__r")]
           else if (key == "RecordTypeId") preProcess.RecordType
           else val
}
---
finalResult

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:54:03