关于
了解 Compare JSON 如何报告结构和值的变化、数组与类型匹配选项如何工作,以及哪些功能在本地处理数据、哪些功能会发起网络请求。
comparejson.com 是一个在浏览器中查找两份 JSON 文档实际变化的工具。你可以直接粘贴或编辑 JSON、拖入文件,或从 URL 加载数据,然后按照完整键路径查看新增、删除、值变更和类型变更。它适合开发者、测试人员、数据工程师,以及需要审查结构化数据、又不想先编写对比脚本的人。
什么是语义化 JSON 对比
文本差异工具比较的是行,语义化对比则会先把两侧输入解析为 JSON,再递归比较对象、数组、值和值的类型。因此,缩进和对象键顺序的变化本身不会产生差异,而嵌套对象中的值变化仍会被指出。
例如,对比下面两份文档:
基准
{
"name": "Ada",
"active": true,
"roles": ["admin", "editor"]
}
对照
{
"roles": ["editor", "admin"],
"active": false,
"name": "Ada"
}
name 或 roles 在对象中的位置变化不会被报告为数据变化;active 从 true 变为 false 会被报告。roles 的结果取决于数组设置:选择按索引时,两个位置都会被报告为发生变化;选择无序时,两侧含有相同的两个元素,因此不会报告数组差异。所以,数组对比方式应与数据中顺序是否有意义保持一致。
实际使用场景
- API 开发与测试: 对比预期响应与实际响应,或两个环境返回的响应。借助键路径,可以区分嵌套数据中的字段缺失、字段新增、值变化和类型不一致。
- 配置审查: 在格式化、生成或部署后检查两份 JSON 配置快照。语义化对比会排除排版和对象键顺序的干扰,让你集中查看实际生效的配置变化。
- 数据转换与调试: 对比转换前后的输入和输出,或在流程出现异常时检查两次导出的状态。
active这样的路径能指出需要检查的位置,但本身不会解释变化发生的原因。 - 测试夹具与导出文件: 在使用或提交测试夹具、导出的设置及其他结构化文件前,检查其中的变化。
结果视图与对比选项
结果页提供两种查看同一组输入的方式:
- 数据对比以只读、左右对齐的结构化视图展示结果。侧边栏按差异类型分组并显示完整路径,可以点击条目跳转到对应差异,也可以显示或隐藏某类差异。
- Git Diff 以左右并排、逐行的形式显示原始输入文本的差异。与数据对比不同,这个视图也会显示排版和对象键顺序的变化。
可以在对比前及结果页调整以下设置:
- 按索引比较数组中相同位置的元素;LCS 保留有序的公共元素并识别插入和删除;无序将数组作为多重集比较,忽略顺序,但仍考虑重复元素的数量。
- 当大小写差异不影响数据含义时,可以使用忽略键大小写和忽略值大小写排除这类差异。
- 数字字符串等于数字可以将
"42"这样的数字字符串视为等于数字42。如果需要保留这种类型区别,请不要启用该选项。
局限性,以及何时更适合文本差异
语义化对比要求输入是有效的 JSON,并且只描述结构差异;它不会依据 JSON Schema 验证数据,不会判断某项变化是否正确,也不会套用特定业务的等价规则。数组结果取决于所选的匹配方式,忽略选项则会有意隐藏部分差异。结果视图用于检查,不提供文档合并或修复功能。
如果你审查的是缩进、对象键顺序或补丁中的具体文本行,请使用 Git Diff 或其他文本差异工具。对于其他格式的数据,应使用针对该格式设计的解析或对比工具。如果文档无法解析为 JSON,请先检查语法,再依据语义化结果作判断。
本地处理与网络边界
JSON 解析和对比计算均在浏览器本地执行,仅运行对比不会上传编辑器内容。编辑器会将输入保存在浏览器的 sessionStorage 中,使其在当前标签页会话内经过页面导航或重新加载后仍可恢复。这些数据通常会在标签页关闭时清除,但离开或重新加载页面不会将其删除;你也可以通过浏览器的网站数据设置手动清除。
以下可选功能会涉及网络传输:
- 从 URL 导入时,浏览器会向你指定的来源发起请求。
- 使用分享时,被对比的内容会上传到分享服务器,并按你选择的保留期限保存。任何持有分享链接的人都可以查看这些内容。
- URL 查询参数会随页面请求发送,并可能出现在托管服务日志中。Base64 编码并不能让敏感数据适合放入 URL。
有关本地存储、分享、网络请求和标准网站日志的更多说明,请参阅隐私政策。
文档与支持
可以从快速开始了解基本操作流程。文档还分别介绍了数组对比方法、对比选项、Git Diff 视图和分享结果。
如有问题、缺陷反馈或功能建议,请联系 [email protected]。反馈对比问题时,附上可复现的最小示例和所选选项会更有助于排查;发送前请移除其中的敏感数据。