⭐ 觉得好用?收藏备用,下次直接打开
左侧
右侧
差异路径(点击跳转)
粘贴两侧 JSON 开始对比

JSON 对比工具 做的是语义级 diff——把两份 JSON 解析成结构化值后再比较,忽略 key 顺序、缩进、空白等文本层面的无关差异,只呈现真正的数据改动:新增、删除、修改、数组内移动。

和文本 diff 的本质差别

对比维度文本 diffJSON 语义 diff
比较对象字符序列解析后的值树
key 顺序变化显示差异忽略
缩进/空白变化显示差异忽略
数组元素移动显示成删+加识别为 move
适用场景纯文本、代码JSON 数据、配置、API 响应

四类变更

  • 新增(+) — 右侧有、左侧没有的路径
  • 删除(−) — 左侧有、右侧没有的路径
  • 修改(~) — 同一路径两侧值不同
  • 移动(↕) — 数组内同一元素位置变了(靠 id / key / name / uuid 或值指纹识别身份)

表达式栏:只比一部分

支持 JSONPath$.data.items[*].id)和 JS 表达式.filter(x=>x.status==='active')),同一表达式同时作用于两侧,适合只对比一部分——例如接口返回了一大堆元数据,只想比 data.items,写 $.data.items 即可。JS 在 Web Worker 里带 1.5 秒超时运行,不会卡住页面。

delta 复制

把差异压成 jsondiffpatch 紧凑格式,可以直接作为版本补丁存数据库或传输,点击工具条里 复制 delta 旁的 ? 查看完整格式规范。

什么时候用文本对比而不是 JSON 对比

关心原始字符串格式(缩进策略、字段顺序、尾逗号)时;输入不是合法 JSON(比如 JSON5、JSONL、片段);或者对比的是非 JSON 文本。反之只要是合法 JSON 且只关心数据变化,JSON 对比视图更清爽。

📍使用场景

  • 接口回归对比同一接口两次响应贴进来,一眼看出哪些字段加了、删了、值变了,忽略 key 顺序干扰。
  • 配置变更审查发布前后两份 config.json 对比,确认只改了预期的键,避免漏改或误改。
  • 数据快照回溯线上数据和备份/期望数据比对,点击差异路径跳到编辑器对应行,快速定位问题。

常见问题

为什么 key 顺序不同不算差异?

因为本工具做的是语义 diff——比较 JSON 值本身,而不是字符串。{"a":1,"b":2}{"b":2,"a":1} 在 JSON 规范里是等价对象,key 顺序不具语义。如果要逐字符对比(比如关心原始序列化格式),请改用 文本对比

数组元素的"移动"是怎么识别的?

底层用 jsondiffpatchobjectHash 认元素身份:优先看 idkeynameuuid 字段,都没有就 JSON.stringify 整个值当指纹。同一元素在两侧位置不同即判为「移动」。推论:原始类型数组([1,2,3] / ["a","b"])可以精准识别移动;对象数组若无 id 类字段,改了任意字段就被视为「不同元素」,可能误判成「删除+新增」。

"复制 delta" 按钮里的 delta 是什么?

delta 是 jsondiffpatch 的差异 JSON 格式——两份 JSON 的所有改动压成一个紧凑对象,可以存数据库做版本追踪、或在前后端之间只传差异而不是整个对象。叶子节点用数组表示:[新值] 新增、[旧, 新] 修改、[旧, 0, 0] 删除、["", 新索引, 3] 数组内移动。用 jsondiffpatch.patch(left, delta) 可从左侧还原右侧。工具条里有完整的格式说明弹窗。

表达式栏里的 JSONPath 和 JS 怎么写?区别是什么?

JSONPath(以 $ 开头):$.user.name$.items[*].id$..price,选路径、全部命中结果返回数组(单命中自动解包)。JS.map(x=>x.id).filter(x=>x.age>18).reduce(...),把整份 JSON 当作 data 变量,走 new Function、在 Web Worker 里带 1.5s 超时跑;也可以直接写 data.user.name同一表达式同时应用到两侧,便于只对比关心的部分;点「还原原文」退出表达式视图。

为什么有时"修改"的行显示成"字符串差异"?

当两侧同一路径的字符串值都比较长(默认阈值很高,工具里已设为 9999 基本禁用)时,jsondiffpatch 会调用内部文本 diff 给出字符级补丁而不是 [旧, 新] 两值。本工具默认禁用文本 diff(阈值很大)以保证 delta 易读;如果看到「字符串差异」,说明某些场景仍触发了——直接看编辑器里的高亮行即可。

两侧都能编辑吗?改完会自动对比吗?

是的——左右都是完整 Monaco 编辑器,粘贴、修改都会在 300ms 防抖后自动重新对比,无需手动点按钮。Alt+↑ / Alt+↓(或 Alt+k / Alt+j)切换差异;点差异树条目跳转编辑器对应行并闪烁提示。输入内容自动持久化到浏览器本地,刷新不丢。