如何对比 JSON
- 在左侧粘贴原始 JSON,在右侧粘贴修改后的 JSON,或分别将文件拖到两侧。
- 查看摘要和差异列表:每个新增、删除或修改的值都会显示其路径,例如
$.users[2].email。 - 向下滚动到左右并排视图,即可结合上下文查看改动。如果列表项的顺序无关紧要,请勾选忽略数组顺序。
语义化 JSON 对比,而非文本 Diff
普通的文本 Diff 只要遇到键的位置移动、缩进不同或数字写法不同,就会报告为改动。而这个 JSON Diff 工具对比的是数据本身:
- 忽略键的顺序:
{"a":1,"b":2}与{"b":2,"a":1}相同。 - 忽略格式:空格、换行和缩进不会产生差异。
- 按数值比较数字:
1.0与1相等。 - 数组自动对齐:插入一项不会导致后面的所有项都被标记为已修改,修改过的对象会与最相似的对应项匹配。
- 忽略数组顺序:将数组视为无序集合进行比较,适用于标签、ID 或权限列表。
如何解读对比结果
| 标签 | 含义 | 路径指向 |
|---|---|---|
| 新增 | 该值仅存在于修改后的 JSON 中 | 它在修改后的 JSON 中的位置 |
| 删除 | 该值仅存在于原始 JSON 中 | 它在原始 JSON 中的位置 |
| 修改 | 两个文档都有该键,但值或类型不同 | 它在修改后的 JSON 中的位置 |
在左右并排视图中,两个文档都会按排序后的键进行格式化,使相互对应的行并排显示;大段未改动的内容会被折叠,除非取消勾选隐藏未改动的行。
常见问题
键的顺序会影响对比结果吗?
不会。按照定义,JSON 对象是无序的,因此对比时会忽略键的顺序。数组则是有序的,除非勾选“忽略数组顺序”。
可以对比大型 JSON 文件吗?
可以。对比在你的浏览器中进行,默认列出前 200 处差异,点击按钮即可显示全部;左右并排视图最多显示 5,000 行。
如何在代码中对比 JSON?
在 Python 中,json.loads(a) == json.loads(b) 可以判断两者是否相等。JavaScript 没有内置的深度比较功能,可以使用 Lodash 等库提供的 _.isEqual(a, b)。在命令行中,diff <(jq -S . a.json) <(jq -S . b.json) 会显示存在差异的行。
我的数据会被上传吗?
不会。两个文档都在你的浏览器中本地对比,数据始终不会离开你的设备。