跳到正文

JSON 对比

JSON Diff

按结构比较两份 JSON,忽略键的顺序,报出新增、删除和改动的路径。

按结构而不是按文本比较两份 JSON 文档,所以键的顺序变了或缩进不同不算差异。输出既是一张可读的改动表,也是一份能把左边文档精确变成右边文档的 RFC 6902 补丁。

🔒 完全在你的浏览器里运行jsondiffcompare
数组比较

先把两个数组对上,这样插入一个元素算一处改动,而不是一百处。

左

右

怎么用

  1. 粘贴两份文档

    两份接口响应、两份配置、改前和改后。比较在 worker 里运行,随你输入更新。

  2. 选择数组怎么比较

    这个设置决定结果有没有用。「对齐」先把两个数组对上,插入一个元素就是一处改动。「按下标」逐位置比较,顺序本身就是数据时用它。「按键」用一个指定的成员匹配元素——两份响应以不同顺序列出同一批东西时,答案是它。

  3. 决定 null 是否等于缺失

    有的序列化器省略空字段,有的写 `null`。如果你在比较两套技术栈的输出,打开它能去掉一整页的假差异。

  4. 拿表,或者拿补丁

    表是给人读的;补丁是拿去应用的。两者里的路径都是 RFC 6901 指针,可以粘进任何懂 JSON Patch 的工具。

常见问题

为什么数组里插入一个元素显示成一百处改动?

因为数组模式是「按下标」,所以元素 1 在和元素 2 比较,一切都错位了。切到「对齐」,它先把数组对上;或者元素有 id 的话切到「按键」。

我能在这里应用补丁吗?

不能,这个页面只生成它。但补丁是精确的:把它应用到左边文档,在数据模型里逐字节得到右边文档,这个来回是测试套件在每次改动时都断言的。

它说两份文档没有关联。

这条消息在比较超过两万处改动并停下时出现。到那时 diff 已经告诉不了你任何有用的东西——你在比较两份不同的文档,而不是同一份的两个版本。

键的顺序有关系吗?

对这个工具没有——JSON 对象是无序的,所以两份只在键顺序上不同的文档报告为相同。如果键的顺序对你的消费方有关系,那个消费方依赖的是 JSON 没有承诺的东西。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。