
什么是 JSON 差异对比?
JSON 差异对比是比较两个 JSON 文档以识别它们之间变化的过程。这在调试 API 响应、跟踪配置更改、审查数据迁移或调查数据随时间如何及何时变化时至关重要。
一个好的 JSON 差异工具超越了简单的文本比较——它理解 JSON 结构并显示有意义的语义差异。

JSON 变化的类型
比较两个 JSON 文档时,变化分为四类:
新增:新版本中存在但旧版本中没有的键/值:
// 旧: { "name": "Alice" }
// 新: { "name": "Alice", "age": 30 }
// 差异: + "age": 30
删除:旧版本中存在但新版本中没有的键/值:
// 旧: { "name": "Alice", "status": "pending" }
// 新: { "name": "Alice" }
// 差异: - "status": "pending"
修改:两个版本中都存在但值不同的键:
// 旧: { "count": 10 }
// 新: { "count": 15 }
// 差异: ~ "count": 10 -> 15
未变:两个版本中完全相同的键/值(通常在差异视图中隐藏)。
数组比较的挑战
数组比对象更难进行差异对比,因为项目没有固有的键。考虑:
// 旧: [1, 2, 3, 4]
// 新: [1, 3, 4, 5]
一个简单的比较可能会说位置 1、2、3 都发生了变化。更智能的差异对比会识别出元素 2 被删除,元素 5 被添加。
对于对象数组,选择什么作为匹配键很重要:
// 旧: [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
// 新: [{"id": 2, "name": "Bobby"}, {"id": 3, "name": "Charlie"}]
使用 id 作为键:Alice(1) 被删除,Bob(2) 重命名为 Bobby,Charlie(3) 被添加。
JSON 差异算法
JSON Merge Patch (RFC 7396) 格式紧凑地描述差异:
// 将旧版本转换为新版本的补丁
{
"removed_field": null, // null 表示删除
"changed_field": "new_value",
"new_field": "added_value"
// 缺失的字段表示未变
}
JSON Patch (RFC 6902) 格式将差异描述为一系列操作:
[
{ "op": "remove", "path": "/removed_field" },
{ "op": "replace", "path": "/changed_field", "value": "new_value" },
{ "op": "add", "path": "/new_field", "value": "added_value" }
]
JSON Patch 支持以下操作:add、remove、replace、move、copy、test。

实际使用场景
API 响应调试
当 API 响应意外变化时,比较两个连续的响应可以精确揭示变化内容。这在调试间歇性问题时尤其有价值。
配置管理
比较不同环境(开发、预发布、生产)之间的配置文件有助于识别特定环境的差异。

数据库迁移验证
数据迁移后,比较迁移前后的 JSON 导出可以验证迁移是否正确转换了数据。
代码审查
使用结构差异工具审查 JSON schema 文件或示例 API 响应的更改会变得更加清晰。
使用此工具
在并排编辑器中粘贴两个 JSON 文档。该工具:
- 验证两个文档是否为有效 JSON
- 使用颜色编码显示结构差异(绿色=新增,红色=删除,黄色=修改)
- 处理嵌套对象和数组
- 提供可视化差异和 JSON Patch 输出
-> 尝试 JSON 差异工具