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

在MuleSoft中使用DataWeave实现JSON动态值映射

动态字段映射需求

需将输入JSON载荷与映射JSON对象通过country字段关联,使用对应映射的JSON路径动态提取输入字段,生成目标JSON。每条输入记录需根据自身country匹配对应的映射结构。

输入Payload

[
    { 
        "user" : "User1", 
        "city" : "City1", 
        "country": "ABC", 
        "details": { "name": "John1", "age": 30 }
    },
    { 
        "user" : "User2", 
        "city" : "City2",
        "country": "XYZ",  
        "details": { "name": "Joe", "age": 40 }
    }
]

映射变量(按country关联)

var Mappings = [
    {  
        "country": "ABC",  
        "user" : "payload.user",  
        "city" : "payload.city",   
        "name" : "payload.details.name",   
        "age" : "payload.details.age"  
    },
    {
        "country": "XYZ",  
        "user" : "payload.user",  
        "name" : "payload.details.name",   
        "age" : "payload.details.age"  
    }
]

注:原映射代码存在语法错误,已修正为合法数组结构

预期输出

[  
    {  
        "user": "User1",  
        "city": "City1",  
        "country" : "ABC",  
        "name" : "John1",  
        "age" : 30  
    },  
    {  
        "user": "User2",  
        "country" : "XYZ",  
        "name" : "Joe",  
        "age" : 40  
    }  
]

可行的DataWeave解决方案

%dw 2.0
output application/json
// 修正后的合法映射变量
var Mappings = [
    {  
        "country": "ABC",  
        "user" : "payload.user",  
        "city" : "payload.city",   
        "name" : "payload.details.name",   
        "age" : "payload.details.age"  
    },
    {
        "country": "XYZ",  
        "user" : "payload.user",  
        "name" : "payload.details.name",   
        "age" : "payload.details.age"  
    }
]
---
payload map (item) -> do {
    // 匹配当前记录对应的映射规则
    var matchedMapping = Mappings filter ($.country == item.country)[0]
    // 遍历映射键值对,动态提取字段值
    var mappingEntries = matchedMapping pluck ((value, key) -> 
        if (key != "country") {
            (key): read(value, "application/dw", {"payload": item})
        } else {
            (key): value
        }
    )
    // 将分散的键值对合并为单个目标对象
    mappingEntries reduce ((entry, acc = {}) -> acc ++ entry)
}

代码说明

  • 用map遍历输入的每条记录
  • 通过filter精准匹配当前记录对应country的映射规则
  • 借助pluck遍历映射键值对,使用read函数结合当前记录作为上下文,解析JSON路径并提取对应值
  • 最后用reduce将零散的键值对合并为完整的目标对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 13:03:25