JSON 对比
语义化对比两段 JSON 文档,按路径列出所有新增、删除和修改的字段,不受格式或键顺序影响。
差异结果
- 修改$.role"engineer"→"staff engineer"
- 删除$.age28
- 新增$.team"platform"
提示:粘贴压缩或格式化后的 JSON 均可——空白不影响比较结果。
JSON Diff 先解析两侧输入,再作为数据而非文本进行比较。因此键的顺序调整、缩进变化或空格不同都不会成为噪音:仅位置移动的字段不会被报告,真正改变的值会连同完整的 JSON 路径一起显示。
每处差异被归类为新增、删除或修改。修改的值会并排显示旧值与新值,新增和删除只列出存在的一侧。对象路径用点号、数组用方括号表示,例如 $.user.addresses[0].city。
本工具完全在浏览器中运行,两段文档都不会被上传。对象按键比较,数组按顺序逐元素比较。与字符级文本 diff 不同,移动一段 JSON 不会被误判为先删后增。
常见用途
- 在部署修复前,核对两个 API 响应或配置文件之间究竟改了什么。
- 审阅同事修改过的 JSON 负载,聚焦真正的值变化而非格式调整。
- 调试两条本应相同的记录为何不同,定位到具体的分歧字段。
常见问题
- 键的顺序会影响结果吗?
- 不会。JSON 对象是无序集合,比较时按键匹配,与每个键出现的位置无关。重新排列键不会产生任何差异,只有真正的值变化才会被报告。
- 数组是怎么比较的?
- 数组按每个下标逐元素比较。如果在中间插入元素,后续元素的下标都会移动,可能显示为变化。这是有意为之:按值匹配元素需要二次方搜索,在大数组上会卡死页面。
- 如果其中一侧不是合法 JSON 怎么办?
- 对比会停止并报告哪一段文档解析失败,同时给出解析器提供的行列号。先修正语法错误,两侧都合法后对比会自动恢复。
- 为什么不直接用文本 diff?
- 文本 diff 基于字符和行工作,重新格式化或移动代码块会产生大片红绿色块,即使数据并未改变。语义化 JSON diff 把两侧都当作值来处理,只报告有意义的变化,让审阅更快、更不易出错。
- 我的数据会被上传吗?
- 不会。解析和比较都在浏览器中用 JavaScript 完成,两个文本框里的内容都不会经网络发送。只要你信任自己的机器,就可以安全地对比含密钥的配置。