跳到正文
马克工具箱

JSON 对比

准确找出两个版本的配置文件、接口返回或数据文件之间改了什么。差异按路径列出(如 $.users[2].email),调整键的顺序或重新格式化都不会被当成修改。

在浏览器本地运行,输入的内容和文件都不会上传

在两侧都粘贴 JSON 后即可比较。

使用步骤

  1. 在左侧粘贴原始 JSON,右侧粘贴修改后的 JSON。
  2. 选择数组是否需要考虑顺序。
  3. 查看新增(+)、删除(−)、修改(~)的列表,也可以复制为文本报告。

参数说明

按位置比较
数组元素逐个按下标比较。因此在开头插入一项,后面每个位置都会显示为修改。
忽略顺序
把数组当作无序集合,只报告一边有而另一边没有的元素,适合 ID 列表、标签或记录列表。
路径
使用 JSONPath 写法:$ 表示根,.key 表示属性,[0] 表示数组元素,["a b"] 表示不是普通名称的键。

示例

看下面两份文档,键的顺序不同,部分值也不同:

{"name": "Ada", "age": 36, "tags": ["x", "y"], "address": {"city": "Rome"}, "first name": "A"}
{"age": 37, "name": "Ada", "tags": ["y", "x"], "address": {"city": "Rome", "zip": "00100"}, "first name": "B", "role": "admin"}

按位置比较,结果如下:

变更 路径 修改前 修改后
~ $.age 36 37
~ $.tags[0] “x” “y”
~ $.tags[1] “y” “x”
+ $.address.zip “00100”
~ $["first name"] “A” “B”
+ $.role “admin”

打开「忽略顺序」后,两条 tags 的变更会消失,因为两个数组里装的是同样的两个值。两种模式下,键的顺序都没有影响。如果某个值的类型发生变化,例如数字变成字符串,或对象变成数组,则在它自己的路径上报告为一处变更。

常见问题

和文本对比有什么区别?

文本对比按行比较,格式和键顺序的变化都会显示出来。JSON 对比会解析两边的数据,只比较内容本身。

1 和 "1" 算相同吗?

不算。数字和字符串是不同的 JSON 值,会作为修改列出两边的值。

数据会上传吗?

不会,两份 JSON 都在浏览器中比较。

隐私说明

本工具完全在浏览器中运行,文件和文本都在你的设备上处理,不会上传到我们的服务器。

相关工具