跳到主内容
UniKit

JSON 对比

比较两段 JSON,列出新增、删除、修改的 JSONPath 与统计;数组既可以按索引比较,也可以按指定 id 键比较,可切换只看差异或看全部。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

差异统计

请输入 JSON 文本

这个工具能做什么

  • 接口返回结果对不上时,把改动前后的两份 JSON 贴进来,逐条看清哪个字段被改了、加了还是删了。
  • 做配置迁移或版本对比:确认新旧配置文件除预期字段外没有其它意外改动。
  • 排查数组里的元素增删:按 id 键比较时可以准确定位是哪一条记录新增或删除,而不是被索引错位误导。
  • 写变更说明或提交记录:把差异清单直接复制出来,作为接口变更的凭证贴进文档或工单。

示例

输入

左侧 {"name":"UniKit","version":1,"list":[{"id":1,"title":"A"},{"id":2,"title":"B"}],"debug":true}
右侧 {"name":"UniKit","version":2,"list":[{"id":1,"title":"A"},{"id":3,"title":"C"}],"extra":null}

输出

相同 $.name "UniKit"
修改 $.version 1 → 2
相同 $.list[0] {"id":1,"title":"A"}
修改 $.list[1].id 2 → 3
修改 $.list[1].title "B" → "C"
删除 $.debug true
新增 $.extra null
统计:新增 1 · 删除 1 · 修改 3 · 相同 2

示例按索引比较数组。把数组比较方式切成「按 id 键」后,list 会变成 $.list[id=1] 相同、$.list[id=2] 删除、$.list[id=3] 新增,不会被索引错位干扰。

常见问题

数组按索引和按 id 键有什么区别?

按索引是逐个位置对比,数组中间插入一条会导致后面全部变成「修改」;按 id 键则用指定字段的值配对元素,能准确识别出新增和删除的是哪一条。数组元素是带唯一字段的对象时,优先用按 id 键,字段名可以自定义,默认是 id。

对象的键顺序不同会被当成差异吗?

不会。比较是结构化的:对象按键名匹配,键顺序无关;只有数组顺序敏感。所以 {"a":1,"b":2} 与 {"b":2,"a":1} 会被判为完全相同。

JSON 有语法错误时会怎样?

会明确指出是左侧还是右侧,并给出第几行第几列以及原因,例如内容意外结束、字符串缺少结束引号、JSON 结束后还有多余内容。工具不会去猜你想表达什么,修正后重新粘贴即可。

差异结果是路径 + 值的格式吗?

是。每一行是「类型 路径 值」,路径用 JSONPath 写法($.list[0].name,非标识符键写成 $["a-b"]),修改会显示成「旧值 → 新值」。切到「显示全部」还会列出没有变化的字段,方便确认哪些部分是一致的。

两份 JSON 会上传吗?

不会。解析、比较与渲染都在浏览器里完成,页面不发送网络请求,断网也能用;接口数据或配置内容不会被记录。

关键词:jsonjson 对比json diff比较 jsoncompare json差异json 比较array diff

同类工具