JSON 对比与合并
按字段路径比对两份 JSON,数组可按下标或主键对齐,再选策略深度合并。
两份 JSON 的差别不能只靠文本 diff:同一份配置换个键顺序、数组里多插一项,逐行比对就会把整片内容标成改动。这个工具先解析再按路径比对,只把真正变化的字段列出来,路径写成 data.items[2].price 这种点号加下标的形式。合并走的是 RFC 7386(JSON Merge Patch)的口径:对象逐层递归,标量和数组都是「值」,合并不会改动输入,结果里每个值都是新副本。
要提前知道的边界都在对齐与合并这两处。数组默认按下标对齐,最直观,但只要在开头插入一项,后面所有元素都会被判成修改;改用「按键名」并填一个业务键(如 id),就按这个键找出两侧的同一个元素再逐项比对,插入和调换顺序都不会误报——这与 jsondiffpatch 用 objectHash 匹配数组元素的做法一致,元素没有该键时自动退回按下标匹配。合并也只有「递归合并」才会把两侧数组按当前对齐方式逐个元素合起来,「保留左 / 保留右」是数组整体替换,而「保留右」还会照规范把右值写成 null 的键删掉。输出是普通文本,选中即可抄走,本页没有下载按钮。
JSON 对比与合并怎么用
- 对比模式:两份 JSON 各占一栏并排粘进去(窄屏会上下叠放),差异清单独占整行,按新增、删除、修改分色列出路径与两侧的值——五列各占固定比例,所以长路径不会被挤成竖排;类型不同的位置只报一条「类型 文本 → 对象」,不再往下钻。输出是普通文本,选中即复制,本页没有下载按钮。
- 数组与忽略:数组对齐选「按键名」时,在工具条里的键名框填 id、_id、name 之类的字段;忽略路径支持 a.b[*].c,只写 a.b 会连整棵子树一起忽略,多条用逗号分隔。
- 合并模式:切到「合并」后差异清单与合并结果并排各占半栏(这是唯一让结果区回到两栏的模式,窄屏仍叠放);三种冲突策略的差别只在值冲突时取哪一侧,以及数组是否逐元素合并。
常见问题
为什么右侧多了一个 null,合并后对应键却消失了?
这是 RFC 7386 的定义:合并补丁里 null 表示「删除这个键」。只想把 null 当普通值保留,就换「保留左」或「递归合并」,这两种策略不会删键。
数组为什么整体被替换了?
在「保留左 / 保留右」下数组被视为一个值,整体替换才符合合并补丁规范;要逐元素合起来请把冲突策略改成「递归合并」,再决定按下标还是按键名对齐。
某一份 JSON 有语法错误会怎样?
只提示出错的那一侧,并给出「第几行第几列、这里应该是什么」,另一侧不受影响;修好之前不会输出差异或合并结果。
对应功能编号 #22无需安装,手机端同样可用按 Ctrl + K 换工具