JSON Diff 结构对比
按结构(而非文本)递归比较两份 JSON,高亮新增、删除、值变更、类型变更,支持忽略键顺序、忽略数组顺序、按主键匹配数组元素、忽略大小写与空白,输出 JSON Patch。
🔒 本地运行🧬 支持 JSON Patch
差异清单左右对照JSON Patch / 结构
左侧(旧 / 基准)✔
右侧(新 / 待检)✔
新增字段
4
删除字段
1
值变更
3
类型变更
1
共 9 处差异
· 新增 4 · 删除 1 · 变更 3 · 类型 1
类型发生变化,反序列化可能直接报错,务必找上游确认。
差异清单
全部新增删除变更
| 类型 | 路径 | 左侧 | 右侧 |
|---|---|---|---|
| ~ 变更 | $.message | ok | success |
| ~ 变更 | $.timestamp | 1730000000 | 1730009999 |
| ! 类型 | $.data.list[id=1001].pricenumber → string | 299 | 299 |
| + 新增 | $.data.list[id=1001].hot | — | true |
| ~ 变更 | $.data.list[id=1002].price | 499 | 459 |
| + 新增 | $.data.list[id=1002].tags[1] | — | RAG |
| − 删除 | $.data.list[id=1003] | {"id":1003,"name":"数据大屏可视化模板","price":199,"onSale":false,"ta… | — |
| + 新增 | $.data.list[id=1004] | — | {"id":1004,"name":"秒杀系统实战","price":159,"onSale":true,"tags":… |
| + 新增 | $.data.pageInfo.hasNext | — | false |
路径中的
[0] 表示数组下标;开启「数组主键」后显示为 [id=1001],元素挪位置也不会误报。 本工具能做什么
按结构(而非文本)递归比较两份 JSON,高亮新增、删除、值变更、类型变更,支持忽略键顺序、忽略数组顺序、按主键匹配数组元素、忽略大小写与空白,输出 JSON Patch。
结构级递归比较
新增/删除/值变更/类型变更四类统计
差异清单 + 左右对照 + JSON Patch 三视图
数组主键配对 / 忽略顺序 / 忽略字段
JSON Patch (RFC 6902) 输出
适用场景
- 后端接口返回数据格式化查看
- 前后端联调时快速校验 JSON
- 文档和代码中的 JSON 整理美化
常见问题
和用文本 diff 工具比 JSON 有什么区别?
文本 diff 会因为键顺序、缩进、末尾换行不同而报出一堆假差异。本工具先 JSON.parse 成对象再递归比较,只关心「哪个路径的值变了」,键顺序与格式完全不影响结果。
数组元素顺序变了,怎么避免整片报差异?
两个办法:一是勾选「忽略数组顺序」,此时按内容做集合比较,只报真正多出来/少掉的元素;二是填写「数组主键」(如 id),工具会按主键把左右元素配对,再逐个比字段,路径显示为 list[id=1001].price,定位最精确,推荐用于列表接口回归。
时间戳、traceId 这种每次都变的字段能忽略吗?
可以。在「忽略字段」里填 timestamp,traceId,data.updateTime,逗号分隔。支持点号路径,也支持只写末级键名(此时所有层级的同名键都会被忽略)。
「值变更」和「类型变更」为什么要分开统计?
类型变更是更危险的信号。"price": 299 改成 "price": "299"、或者 null 变成 [],值看着差不多,但前端反序列化、Java 实体映射会直接抛异常。所以本工具把它单列一档,看到这一档非 0 就该找上游确认。
大文件会不会卡?数据安全吗?
几千个字段的响应体在浏览器里递归比较是毫秒级的。所有解析与比较都在本地完成,页面没有任何上报接口,敏感数据不会离开你的电脑。