JSON比对工具用来找出两段JSON数据到底哪里不一样。它把两份JSON解析成树结构后逐层递归比较,对象比键、数组比下标,新增、删除、修改的字段分别用不同颜色标出来。调接口时最常见:测试环境返回{"code":0,"data":{"id":1024,"name":"张三"}},生产环境返回{"code":0,"data":{"id":1024,"name":"张三","vip":true}},肉眼扫半天看不出多了个vip字段,粘进来一比对,新增项立刻高亮。改配置、核对埋点参数、排查缓存脏数据也用得上。
| 对比维度 | 本工具 | 手工/替代做法 |
|---|---|---|
| 定位差异耗时 | 粘贴即出结果,1万行JSON约0.5-1秒 | 肉眼逐行扫,1万行至少10分钟且易漏 |
| 类型差异识别 | 区分1与"1"、true与"true",标为修改 | 肉眼几乎看不出引号差异,常误判为相同 |
| 嵌套层级 | 递归比对任意深度,路径逐级展开 | 深层嵌套靠缩进对齐,超过5层极易看错 |
| 数组顺序 | 可切换按下标或按内容匹配 | 命令行diff按行比,顺序一变全红 |
| 隐私 | 纯本地JS计算,无网络请求 | 在线diff网站需上传,敏感数据有泄露风险 |
不算。JSON对象按RFC 8259定义是无序键值对集合,本工具比较时先对键排序再逐项对比,{"a":1,"b":2}和{"b":2,"a":1}判定为完全相同。只有数组才讲顺序,[1,2]和[2,1]默认算差异,除非勾选忽略数组顺序。
不一样,会标为修改。JSON里1是Number类型,"1"是String类型,类型不同即视为差异。同理true和"true"、null和"null"都不同。如果接口返回的id有时是数字有时是字符串,比对结果会全部飘红,建议先统一类型再比。
纯浏览器本地解析,上限取决于设备内存。实测Chrome下10MB左右的JSON(约20万行)解析加比对耗时2-4秒,超过50MB可能触发页面卡顿甚至崩溃。超大文件建议先用命令行jq或Python的json.dumps排序后diff,别硬塞进浏览器。
JSON里0.1和0.2本身是精确存储的十进制字面量,比对按字符解析后的数值严格相等判断。但若一边是0.30000000000000004、一边是0.3,会判定为修改。工具不做epsilon容差,因为容差阈值该设多少没有通用标准,需要容差请自行四舍五入后再比。
不会。整个解析、递归比对、渲染高亮全部在浏览器里用JavaScript完成,没有fetch上传请求。断网状态下打开页面照样能用。关掉标签页数据即消失,不留缓存。涉及密钥、手机号的JSON也可以放心粘。
默认按下标逐个比,[{"id":1},{"id":2}]和[{"id":2},{"id":1}]会报两处修改。勾选“忽略数组顺序”后,工具按元素序列化字符串做集合匹配,只报真正增删的元素。注意元素重复时该模式可能匹配错位,重复项多的数组慎用。
适用JSON RFC 8259标准,支持对象、数组、字符串、数字、布尔、null六种类型。比对为严格相等:类型不同即算差异,数字不做浮点容差,字符串区分大小写与空格。超大文件(>50MB)可能卡顿。全部计算在浏览器本地完成,数据不上传、不落盘,关闭页面即清除。