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

如何在DataWeave中基于ID从JSON数组提取指定字段?

如何用DataWeave根据键在另一个JSON数组中查找元素

你可以通过将查找数组转换为键值映射的方式,高效实现基于id的字段匹配,以下是具体解决方案:

完整DataWeave脚本

%dw 2.0
output application/json
var lookupData = [
    {"id": 1, "shortname": "John", "fullname": "John Doe", "age" : 40,"designation": "Engineer"},
    {"id": 2, "shortname": "Mary", "fullname": "Mary Jane","age" : 36,"designation": "Manager"}
]
// 将查找数组转为以id为键的映射,仅保留需要的字段
var lookupById = lookupData reduce ((item, acc) -> 
    acc ++ {(item.id as String): {
        fullname: item.fullname,
        shortName: item.shortname // 匹配输出要求的字段名
    }}
)
---
payload map ((item) -> 
    // 合并输入项与查找结果,无匹配id时返回空对象避免报错
    item ++ lookupById[item.id as String] default {}
)

关键逻辑说明

  1. reduce转换查找结构:把原数组转成{"1": {fullname: "...", shortName: "..."}, "2": {...}}的键值对形式,通过id直接访问的时间复杂度为O(1),比每次用filter遍历数组的效率更高,尤其适合数据量较大的场景。
  2. map遍历输入负载:对每个输入项使用++运算符,合并原字段与查找得到的fullname、shortName字段。
  3. default {}容错处理:如果输入的id在查找数组中不存在,会返回空对象,避免出现null或运行报错。

输入输出验证

输入负载:

[{
  "id": 1,
  "project": "ABC",
  "rate": "150"
},
{
  "id": 2,
  "project": "ABC",
  "rate": "200"
}]

输出结果:

[{
  "id": 1,
  "project": "ABC",
  "rate": "150",
  "fullname": "John Doe",
  "shortName": "John"
},
{
  "id": 2,
  "project": "ABC",
  "rate": "200",
  "fullname": "Mary Jane",
  "shortName": "Mary"
}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:24:33