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

如何用DataWeave移除JSON对象重复键?合并数组后遇重复键问题

DataWeave合并对象数组时移除重复键的解决方案

当你基于公共字段合并两个对象数组时,若出现重复键(如示例中的id),可以通过以下几种方式解决:

原因分析

你当前的脚本使用item2 ++ item合并对象,但两个对象都包含id键,导致生成的对象出现重复键。虽然严格来说JSON不允许重复键,但DataWeave在某些场景下可能会保留这类结构,我们需要通过合理的合并方式避免这种情况。

解决方案1:利用对象合并的覆盖特性优化脚本

DataWeave中++操作符合并对象时,右侧对象的同名键会覆盖左侧的。我们可以调整合并顺序,同时改用更高效的innerJoin(内连接)来替代map+filter,直接获取两个数组的交集并合并:

%dw 2.0
import * from dw::core::Arrays
output application/json
var array1 = [
  { "id": 1, "name": "John" },
  { "id": 2, "name": "Jane" }
]

var array2 = [
  { "id": 1, "age": 30 },
  { "id": 3, "age": 25 },
  { "id": 2, "age": 25 }
]

// 内连接两个数组,匹配id相同的对象
var mergedArray = innerJoin(array1, array2, (a) -> a.id, (b) -> b.id) 
    // 合并对象:用array1的对象(l)作为基础,合并array2的对象(r),同名键会被右侧覆盖(此处id值一致,不影响结果)
    map (({l, r}) -> l ++ r)
---
mergedArray

输出结果

[
  {
    "id": 1,
    "name": "John",
    "age": 30
  },
  {
    "id": 2,
    "name": "Jane",
    "age": 25
  }
]

解决方案2:显式构造合并对象(更直观)

如果需要明确控制每个字段的来源,可以直接构造新对象,避免任何潜在的重复键问题:

%dw 2.0
import * from dw::core::Arrays
output application/json
var array1 = [
  { "id": 1, "name": "John" },
  { "id": 2, "name": "Jane" }
]

var array2 = [
  { "id": 1, "age": 30 },
  { "id": 3, "age": 25 },
  { "id": 2, "age": 25 }
]

var mergedArray = innerJoin(array1, array2, (a) -> a.id, (b) -> b.id) 
    map (({l, r}) -> {
        id: l.id, // 明确指定id来自array1(或r.id,两者值一致)
        name: l.name,
        age: r.age
    })
---
mergedArray

对原脚本的修复

如果你想保留原脚本的map+filter结构,只需调整合并顺序,确保重复键被覆盖:

%dw 2.0
import * from dw::core::Arrays
output application/json
var array1 = [
  { "id": 1, "name": "John" },
  { "id": 2, "name": "Jane" }
]

var array2 = [
  { "id": 1, "age": 30 },
  { "id": 3, "age": 25 },
  { "id": 2, "age": 25 }
]

var mergeArray = array1 map((item) ->
    array2 filter((item2) -> item2.id == item.id) map (item2) -> 
        item ++ item2 // 调整合并顺序,item的键会被item2的同名键覆盖(id值一致,结果唯一)
)
---
flatten(mergeArray)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:41:16