JSON Diff
对比两个 JSON 文档,查看新增、删除与修改内容的结构化差异——完全在你的浏览器中完成。
两份 JSON 文档都在你的浏览器本地解析和对比,绝不会上传,但请避免将密钥或生产凭据粘贴到任何在线工具中。
需要重新整理结果?试试 JSON 格式化工具。
关于 JSON Diff
JSON Diff 会对比两个 JSON 文档,并展示结构化差异,而非逐行的文本差异。把原始 JSON 粘贴到左侧、修改后的版本粘贴到右侧,它会解析两者并精确报告哪些值被新增、删除、修改,或类型发生了变化——每一项都带有像 user.roles[2] 这样的路径。由于对比是语义化的,重新排列对象键永远不会被视为差异,因此你只会看到真正重要的变化。开启「忽略数组顺序」即可将数组作为集合来对比,或开启「键排序」以在并排视图中归一化两侧。它专为对比 API 响应、配置文件和测试夹具的开发者而打造。一切都在你的浏览器本地运行,因此你粘贴的 JSON 绝不会上传,始终留在你的设备上。
功能特性
- 语义化、与键顺序无关的差异——重新排列的对象键不会被标记为变化
- 报告新增、删除、修改与类型变化的值,每一项都带有像 user.roles[2] 这样的路径
- 区分真正的类型变化(1 与 "1"、null 与某个值)和普通的值变化
- 汇总计数让你一眼看清有多少条目被新增、删除和修改
- 「忽略数组顺序」选项会将数组作为值的多重集来对比,而非按位置对比
- 「键排序」归一化让两份格式化文档的并排对比更整洁
- 并排展示两份美化后 JSON 文档,带语法高亮
- 一键将整份差异复制为纯文本摘要,或清空两侧输入
如何使用 JSON Diff
- 将原始 JSON 粘贴到左侧的「原始」框中。
- 将更新后的 JSON 粘贴到右侧的「修改」框中。
- 阅读彩色差异:绿色表示新增,红色表示删除,琥珀色表示修改的值。
- 如果顺序不应计为差异,可切换「忽略数组顺序」或「键排序」。
- 切换到「并排」视图对比两份格式化文档,或复制差异摘要。
示例
输入
// Original
{ "name": "Ada", "roles": ["admin"], "active": 1 }
// Changed
{ "active": "1", "name": "Ada", "roles": ["admin", "editor"] }
输出
+ roles[1]: "editor"
~ active: 1 → "1" (type changed)
重新排列的键被忽略;新增了一个数组元素,且 active 从数字变成了字符串。
常见错误与故障排除
- 工具提示左侧或右侧「Invalid JSON」。 — 修正被标记的文档——错误会指出哪一侧失败以及原因。每个输入都必须是完整且合法的 JSON 值(对象、数组、字符串、数字、true/false 或 null)。
- 重新排列数组中的元素显示为大量被修改的条目。 — 开启「忽略数组顺序」,让数组作为值的集合来对比;不开启时数组按位置对比,重新排列会被计为变化。
- 1 和 "1" 看起来一样,却被报告为不同。 — 这是类型变化:左侧值是数字,右侧是字符串。JSON Diff 有意将类型变化与值变化分开,以便你轻松发现。
- 两个键相同、顺序不同的对象被报告为有变化。 — 它们本不应如此——差异与键顺序无关。如果出现这种情况,很可能某一侧多了或少了一个键,或某个值不同;请检查报告的路径。
常见问题
- JSON Diff 会忽略对象键的顺序吗?
- 会。对比是语义化的,因此两个键和值相同的对象无论键顺序如何都视为相等。只有真正的新增、删除和值变化才会被报告,每一项都带有其路径。
- JSON Diff 如何处理顺序不同的数组?
- 默认情况下数组按位置对比,因此重新排列元素会显示为变化。开启「忽略数组顺序」即可将数组作为多重集对比,此时只有真正新增或删除的成员才会被标记。
- 为什么 1 和 "1" 会显示为不同?
- 因为它们的 JSON 类型不同——一个是数字,另一个是字符串。JSON Diff 将其标记为类型变化,与普通的值变化区分开来,让你能捕捉到 API 响应中被意外字符串化的数字。
- 差异中像 user.roles[2] 这样的路径是什么意思?
- 它指向变化的精确位置:键 user,然后是它的 roles 数组,再到索引为 2 的元素。对象键用点号表示,数组元素用方括号索引表示。
- 我能对比深度嵌套的 JSON 和嵌套数组吗?
- 可以。JSON Diff 会递归遍历任意深度的嵌套对象和数组,在每个变化的完整路径上报告它,因此即使是庞大、深度嵌套的负载也能保持可读。
- 我粘贴到 JSON Diff 的 JSON 会被上传到任何地方吗?
- 不会。两份文档完全在你的浏览器中解析和对比,因此你粘贴的 JSON——包括任何敏感字段——都留在你的设备上,绝不会发送到服务器。
相关工具
全部 ArrayKit 工具