JSON 对比

对比两段 JSON,高亮新增、删除与修改的字段。

2 处差异

  • 修改b.c
    - 2
    + 3
  • 新增d
    + 4

什么是JSON 对比?

JSON 对比(JSON Diff)用于比较两段 JSON 文本的结构差异,自动识别哪些字段是新增的、哪些被删除、哪些值发生了修改,并用不同颜色高亮标出。它不是简单的逐行文本比较(那样会因为字段顺序、缩进不同而产生大量误判),而是先把两段文本分别解析成 JSON 对象,再按键名递归比对,因此对象内部字段顺序不同、缩进风格不同都不影响比对结果,只关注数据本身是否一致。 常见用途是排查接口返回结果的变化、对比两个版本的配置文件、检查数据迁移前后是否一致等。整个比对过程在浏览器本地完成,输入的 JSON 内容不会上传到服务器,适合用来核对包含内部数据、密钥占位符等敏感字段的接口响应。

为什么使用JSON 对比?

在联调接口、排查线上问题或做数据回归测试时,经常需要确认“这次返回的数据和上次有什么不一样”。人工对着两段几十上百行的 JSON 找差异既慢又容易漏看,尤其是嵌套层级深、数组元素多的情况。JSON 对比工具能在一两秒内给出精确到字段路径的差异列表,比如告诉你 `data.user.age` 从 25 变成了 26,`data.list[2]` 是新增的元素。 相比 Git 的文本 diff,它理解 JSON 的语义结构,不会因为一个逗号换行或字段重新排序就报出一大堆无意义的差异;相比手写脚本比较,它开箱即用,不需要额外编码。适合前后端联调核对接口字段、测试同学做响应快照回归、运维核对多个环境的配置文件是否一致。

使用示例

接口响应版本对比

左侧粘贴旧版本返回:{"code":0,"data":{"name":"张三","age":25}};右侧粘贴新版本返回:{"code":0,"data":{"name":"张三","age":26,"vip":true}}。工具会标出 age 字段值从 25 变为 26(修改),以及新增了 vip:true 字段,其余相同字段不做标记。

数组元素增减

左侧:{"tags":["a","b"]},右侧:{"tags":["a","b","c"]}。对比结果显示数组新增了第三个元素 "c",前两个元素保持一致,不会误判整个数组都变了。

配置文件核对

把测试环境的 config.json 和生产环境的 config.json 分别粘贴到两侧,快速找出诸如 timeout 从 3000 改成了 5000、多了一个 debug:true 字段等差异,避免因为人工比对疏漏导致环境不一致上线。

使用提示

对比嵌套很深的大对象时,建议先展开折叠面板查看差异摘要,再定位到具体路径展开细节,避免一次性展开全部节点导致页面卡顿;如果只关心某个子对象的变化,可以先各自截取该子对象再比对,结果会更聚焦。

常见问题

对比结果的路径是什么意思?
路径表示该差异所在的键位置,如 b.c 表示对象 b 下的 c 字段,arr[0] 表示数组第 1 个元素,与常见 JSONPath 写法一致。
数组元素顺序不同会被判定为差异吗?
会。数组按下标逐一比较,若顺序不同会导致对应下标处的值不一致,从而报告为「修改」。
数据会上传吗?
不会。两段 JSON 均在浏览器本地解析与比较,不经过服务器。
字段顺序不同会不会被误判为差异?
不会。工具按 JSON 语义比较键值对,而不是按文本行比较,同一层级里字段先后顺序不影响比对结果,只有键或值真正不同才会被标记。
支持很大的 JSON 吗?
支持,但文本越大、层级越深,浏览器解析和渲染差异结果耗时会相应增加。几百 KB 到几 MB 级别通常没有问题,几十 MB 的超大 JSON 建议先拆分后再比对。
两段内容不是合法 JSON 会怎样?
工具会先做 JSON 解析校验,如果任意一侧不是合法 JSON(比如缺少引号、多了逗号),会提示具体的解析错误位置,需要先修正格式才能继续比对。
数组里元素顺序变了但内容相同,算不算差异?
默认按数组下标逐一比较,如果同样的元素换了位置,会被识别为“对应下标处的值不同”,这与数据库或语义级别的“无序集合比较”不同,如果只关心内容是否等价而不关心顺序,需要自行先排序再比对。
会把我的 JSON 数据发送到服务器吗?
不会,比对逻辑在浏览器本地 JavaScript 中运行,输入内容不经过网络传输,可以放心粘贴包含内部字段的数据。

相关工具

← 返回工具箱· 数据均在浏览器本地处理,不上传服务器。