在浏览器中按结构比较 JSON

比较 JSON 的结构,而不是文本格式

快速理解两份 JSON 文档之间的差异,通过完整键路径查看新增、删除和类型变更,并灵活选择数组对比方式。

基准 JSON

对照 JSON

在工作流中使用 JSON 对比

除了浏览器中的单次检查,还可以在编辑器、终端、AI 助手或代码项目中进行可重复的审查。

浏览器与编辑器扩展

在 Chrome 中捕获 API 响应,或直接在 VSCode 中审查 JSON 和 XML 文档。

终端与 JavaScript

在脚本和 CI 中运行对比,或将同一个结构化对比引擎集成到 JavaScript、TypeScript 项目。

AI 编码助手

通过 Agent Skills 或 Model Context Protocol,让兼容的助手使用文档化的对比命令。

Go、Python 与 Rust

需要在非 JavaScript 应用或工作流中对比 JSON 时,使用相应语言的移植库和 CLI。

语义对比与文本对比

语义对比先解析 JSON 值再进行比较,因此结果反映数据变化,而不只是展示形式的变化。

键顺序与格式

仅调整键顺序或空白字符不会产生语义差异。值和类型变化仍会连同路径一起显示。

{
  "name": "Ada",
  "active": true
}
{"active":true,"name":"Ada"}

数组与原始行

数组顺序是否重要取决于所选策略。需要检查精确的逐行编辑时,文本对比仍然有用。

[
  "A",
  "B"
]
[
  "B",
  "A"
]

输入会作为数据解析,而不会作为 JavaScript 执行;超出 JavaScript Number 安全范围的整数也会在解析时保留。

需要查看原始逐行差异? 了解 Git Diff 视图

第一次使用结构化对比? 阅读快速开始指南

根据数据含义选择对比选项

错误的数组策略可能隐藏移动,也可能把无害的重排报告为差异。请先明确位置和重复值在数据中的含义。

方法适用场景取舍
按索引

每个位置都有稳定含义,例如固定槽位或快照。

插入元素会让后续位置移动,可能使许多元素看起来都发生了变化。

LCS

顺序很重要,并需要通过最长公共子序列对齐插入和删除。

它保留顺序,因此移动项目会表示为删除和插入,而不是一次移动。

无序

顺序无关紧要,例如标签或权限列表。

它使用多重集匹配:重复元素的出现次数仍会影响比较结果,不会像集合一样丢弃重复项。

键大小写

仅当 Status 和 status 表示同一字段时忽略键大小写,否则不同的键可能被视为等价。

字符串值大小写

对规范化文本可忽略值大小写,但不要用于区分大小写的标识符、令牌或用户内容。

数字字符串

仅当 "42" 和 42 在数据模式中等价时,才把数字字符串视为数字。需要关注类型差异时请关闭此选项。

审查 JSON 变更的实际场景

通过结构化差异检查实际变化是否符合预期。结果可以说明两份输入有何不同,但不能判断哪一份文档才是正确的。

将 API 响应与测试夹具对照

比较 id 均为 101、但 status 从 "pending" 变为 "paid" 的两份响应,可单独定位该字段的变化。得出结论前,请先移除或规范化与本次检查无关的时间戳、请求 ID 等预期会变化的字段。

审查配置修改

比较依赖更新前后的 package.json,或检查两个版本的 tsconfig.json。当 compilerOptions.strict 从 false 变为 true 时,其路径会标出需要审查的设置,无关的格式调整不会增加干扰。

验证数据转换结果

比较同一条记录在 ETL 处理前后的内容。如果 total 从 "19.95" 变为 19.95,默认设置会报告类型变更。还应检查字段是消失还是被设为 null,并根据顺序是否具有业务含义来选择数组模式。

检查应用状态快照

保存某个操作前后的状态并比较快照,以定位意外更新。cart.items[0].quantity 这样的路径可将变更值与需要排查的 reducer、事件处理或同步逻辑联系起来。

常见问题

01我的 JSON 数据会被发送到服务器吗?
粘贴 JSON 不会上传文档。解析和对比计算均在浏览器本地执行。使用分享功能会将对比内容上传到分享服务器。从 URL 导入还会向您指定的来源发起请求。Base64 编码并不能让查询参数中的数据保密:数据会随页面请求传输,并可能被托管服务日志记录,因此请勿在 URL 中放入敏感数据。
02工具能处理多大的 JSON 文档?
不存在适用于所有设备的统一大小或处理时间上限。实际可处理范围取决于浏览器可用内存、文档大小与嵌套程度,以及所选数组模式。处理大数组时,LCS 和无序模式可能比按索引模式需要多得多的计算。对于资源要求较高的输入,可尝试按索引模式或比较较小的数据片段;如果工作负载超出浏览器资源,标签页可能变慢或无响应。
03比较器能区分数字、字符串、布尔值和 null 吗?
可以。默认情况下,42 与 "42"、true 与 "true"、null 与 "null" 属于不同类型,类型变更会与值变更分开报告。「数字字符串等于数字」是一项可选的放宽规则,适用于 "42" 与 42 这类值。键名大小写和字符串值大小写是独立设置,不会以其他方式改变 JSON 类型。