JavaScript 合并多个 JSON 片段需先解析为对象或数组,再按类型合并:对象用展开运算符(浅合并)或 Lodash _.merge(深合并),数组用展开运算符拼接或 Set 去重,混合类型需判型处理,最后 stringify 还原为 JSON 字符串。

JavaScript 中合并多个 JSON 片段,本质是合并 JavaScript 对象或数组,因为 JSON 是字符串格式,必须先解析(JSON.parse)成对象/数组,操作后再序列化(JSON.stringify)回 JSON 字符串。直接拼接 JSON 字符串会破坏语法结构,导致解析失败。
合并多个 JSON 对象(同层级键值覆盖或递归合并)
适用于配置项、参数对象等场景。常见方式有浅合并和深合并:
-
浅合并(推荐简单场景):用展开运算符
{...obj1, ...obj2}或Object.assign()。后一个对象的同名属性会覆盖前一个。 -
深合并(需嵌套合并):原生不支持,可手写递归函数,或使用 Lodash 的
_.merge()。例如:_.merge({a: 1, b: {x: 1}}, {b: {y: 2}, c: 3})得到{a: 1, b: {x: 1, y: 2}, c: 3}。
合并多个 JSON 数组(简单拼接或去重合并)
数组合并最常用 concat() 或展开运算符 [...arr1, ...arr2]:
- 若需去重(如合并用户列表),可结合
Set和map提取唯一标识,例如:[...new Set([...arr1, ...arr2].map(JSON.stringify))].map(JSON.parse)(仅适用于纯对象且无函数/undefined)。 - 注意:数组元素为对象时,直接去重需自定义逻辑(比如按
id字段合并),不能依赖默认相等判断。
混合类型或不确定结构的 JSON 合并
先统一解析,再根据类型分别处理:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
立即学习“Java免费学习笔记(深入)”;
- 解析所有 JSON 字符串,用
Array.isArray()和typeof === 'object'判断类型。 - 若全是对象 → 浅/深合并;全是数组 → 拼接;混合 → 报错或按约定规则(如用对象包裹数组)。
- 示例片段:务必加 try-catch 防止非法 JSON 导致崩溃:
const merged = items.map(s => JSON.parse(s)).reduce((acc, cur) => {<br> if (Array.isArray(acc) && Array.isArray(cur)) return [...acc, ...cur];<br> if (typeof acc === 'object' && typeof cur === 'object' && acc !== null && cur !== null) return {...acc, ...cur};<br> throw new Error('不支持的合并类型组合');<br>});
合并后还原为 JSON 字符串
所有合并操作完成后,调用 JSON.stringify(mergedObjOrArr) 输出标准 JSON 字符串:
- 如需美化输出,传入缩进参数:
JSON.stringify(obj, null, 2)。 - 注意:
undefined、函数、Symbol、循环引用会导致stringify忽略或报错,合并前应清理或转换。

















