toolgarden.xyz
EN

JSON 对比

可视化对比两份 JSON / JSONC / JSON5 文档,按字段高亮新增、删除和修改的内容,浏览器本地完成,无需上传。

左侧 JSON(原始)

右侧 JSON(新版)

工具说明

JSON 对比先把两边解析成数据结构,再按对象 key 和数组索引递归比较。它关注的是字段路径与值,而不是缩进、换行或 key 的书写顺序,因此比普通文本 diff 更适合接口响应和配置文件。

结果把新增、删除和修改分开显示,并保留发生变化的路径。对象顺序变化不会产生噪声,但数组本身有顺序,移动数组元素可能同时表现为多个索引发生变化。

使用步骤

  1. 放入基准版本

    左侧输入准备作为基准的旧数据,可以是标准 JSON、JSONC 或 JSON5。

  2. 放入待比较版本

    右侧输入新数据;两边都解析成功后才会生成差异,语法错误会单独指出。

  3. 沿路径核对变化

    从差异列表查看字段路径、旧值和新值,必要时复制输入回原系统确认来源。

输入与输出示例

按字段而不是按行给出差异。注意 key 顺序变化不算差异。

两份 JSON
// 左
{ "name": "kit", "port": 8080, "old": 1 }

// 右
{ "port": 3000, "name": "kit", "tls": true }
差异
~ port   8080 → 3000
- old    1
+ tls    true

支持范围与限制

比较粒度
按字段和路径比较结构,而不是按文本行比较
可识别的变化
新增字段、删除字段、值变化、类型变化
数组处理
按下标位置对比。中间插入一项会让其后所有元素都标记为变化
key 顺序
不影响结果。两份内容相同但 key 顺序不同的 JSON 判定为一致
接受的输入
标准 JSON、JSONC、JSON5,两侧可以是不同写法
与文本对比的区别
文本对比按行比较,会被格式化差异干扰;这里只关心数据本身

典型使用场景

  • 核对 API 版本变化

    比较同一请求在两次部署前后的响应,快速发现字段新增、类型变化或默认值漂移。

  • 审查配置修改

    忽略格式化噪声,只检查真正被删除、添加或改值的配置项。

  • 定位灰度环境的差异

    同一接口在两套环境返回的响应逐字段对比,快速找出配置或数据不一致的位置。

使用前需要知道的事

  • 数组按索引比较。中间插入一项会让后续索引整体移动,不等同于带主键的数据表 diff。
  • 数值比较遵循 JavaScript number 精度,超长整数应在源数据中以字符串保存。
  • 重复 key 在 JSON 解析时会由后一个覆盖前一个,覆盖之前的内容无法进入比较结果。

相关概念

structural diff
先解析数据类型,再按对象成员与数组索引比较的差异算法。
JSON path
用于定位变化位置的路径表示,例如 $.user.roles[0] 指向对象中的第一个角色。

常见问题

JSON 对比能识别哪些差异?
工具会按结构比较两份 JSON,并高亮新增、删除和修改的字段,方便快速定位配置或接口返回的变化。
支持带注释的 JSONC / JSON5 对比吗?
支持。可以对比带注释、尾逗号的 JSONC / JSON5,比较前会先解析成标准结构。
对比会上传我的数据吗?
不会。两份 JSON 都在浏览器本地解析和比较,内容不会上传到服务器。
为什么数组里插一项,后面全部标成变化?
数组按下标位置比较。在中间插入一项后,原来第 2 项变成第 3 项,位置全部错开,因此后续元素都被判为变化。这是按位置比较的固有结果,不是误判。
key 顺序不同会被当成差异吗?
不会。比较基于结构而不是文本,两份内容相同但 key 顺序不同的 JSON 判定为一致。这一点和文本对比不同,后者会把顺序变化显示成大段差异。