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

如何使用DataWeave 2.0比较并合并两个JSON对象

深度合并两个JSON对象的实现方案

需求说明

需要合并两个JSON对象obj1和obj2,遵循以下规则:

  • 当两个对象存在相同键时,取值优先来自obj2
  • 若obj2中不存在某键,则保留obj1中的该键值对
  • 若obj1中不存在某键,则保留obj2中的该键值对
    同时需要支持嵌套对象、数组内对象的层级合并(参考示例)

示例输入

obj1:

{
  "id": "123",
  "fname": "John",
  "lname": "Sam",
  "gender": "F",
  "address1": {
    "country": "USA",
    "city": "San Jose",
    "pin": null
  },
  "officeDetails": [
    {
      "workLocation": "Home"
    }
  ]
}

obj2:

{
  "id": "123",
  "fname": "Victor",
  "lname": "Sam",
  "age": "11",
  "gender": "",
  "address1": {
    "country": "USA",
    "pin": 95112
  },
  "officeDetails": [
    {
      "laptop": "Y",
      "mouse": "Y"
    }
  ]
}

预期输出

{
  "id": "123",
  "fname": "Victor",
  "lname": "Sam",
  "age": "11",
  "gender": "",
  "address1": {
    "country": "USA",
    "city": "San Jose",
    "pin": 95112
  },
  "officeDetails": [
    {
      "laptop": "Y",
      "mouse": "Y",
      "workLocation": "Home"
    }
  ]
}

实现代码(JavaScript)

以下是递归实现的深合并函数,完全满足需求:

function deepMerge(obj1, obj2) {
  // 非对象类型直接返回obj2(优先级更高)
  if (typeof obj1 !== 'object' || obj1 === null) return obj2;
  if (typeof obj2 !== 'object' || obj2 === null) return obj2;

  // 处理数组:按索引合并对应位置的元素
  if (Array.isArray(obj1) && Array.isArray(obj2)) {
    const mergedArr = [...obj2];
    obj1.forEach((item, idx) => {
      mergedArr[idx] = mergedArr[idx] ? deepMerge(item, mergedArr[idx]) : item;
    });
    return mergedArr;
  }

  // 处理普通对象:先复制obj1,再用obj2覆盖/补充
  const mergedObj = {...obj1};
  for (const key in obj2) {
    if (obj2.hasOwnProperty(key)) {
      mergedObj[key] = deepMerge(mergedObj[key], obj2[key]);
    }
  }
  return mergedObj;
}

验证代码

将示例输入传入函数,即可得到预期输出:

const obj1 = { /* 示例obj1内容 */ };
const obj2 = { /* 示例obj2内容 */ };

const result = deepMerge(obj1, obj2);
console.log(JSON.stringify(result, null, 2));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:12