跳到工具

JSON 对比

语义化对比两段 JSON 文档,按路径列出所有新增、删除和修改的字段,不受格式或键顺序影响。

差异结果

  • 修改$.role"engineer""staff engineer"
  • 删除$.age28
  • 新增$.team"platform"

提示:粘贴压缩或格式化后的 JSON 均可——空白不影响比较结果。

JSON Diff 先解析两侧输入,再作为数据而非文本进行比较。因此键的顺序调整、缩进变化或空格不同都不会成为噪音:仅位置移动的字段不会被报告,真正改变的值会连同完整的 JSON 路径一起显示。

每处差异被归类为新增、删除或修改。修改的值会并排显示旧值与新值,新增和删除只列出存在的一侧。对象路径用点号、数组用方括号表示,例如 $.user.addresses[0].city。

本工具完全在浏览器中运行,两段文档都不会被上传。对象按键比较,数组按顺序逐元素比较。与字符级文本 diff 不同,移动一段 JSON 不会被误判为先删后增。

常见用途

常见问题

键的顺序会影响结果吗?
不会。JSON 对象是无序集合,比较时按键匹配,与每个键出现的位置无关。重新排列键不会产生任何差异,只有真正的值变化才会被报告。
数组是怎么比较的?
数组按每个下标逐元素比较。如果在中间插入元素,后续元素的下标都会移动,可能显示为变化。这是有意为之:按值匹配元素需要二次方搜索,在大数组上会卡死页面。
如果其中一侧不是合法 JSON 怎么办?
对比会停止并报告哪一段文档解析失败,同时给出解析器提供的行列号。先修正语法错误,两侧都合法后对比会自动恢复。
为什么不直接用文本 diff?
文本 diff 基于字符和行工作,重新格式化或移动代码块会产生大片红绿色块,即使数据并未改变。语义化 JSON diff 把两侧都当作值来处理,只报告有意义的变化,让审阅更快、更不易出错。
我的数据会被上传吗?
不会。解析和比较都在浏览器中用 JavaScript 完成,两个文本框里的内容都不会经网络发送。只要你信任自己的机器,就可以安全地对比含密钥的配置。

相关工具