JSON Diff
粘贴两个 JSON 文档,精确查看它们之间哪些键被添加、删除或更改。
工作方式
两侧都会被解析为 JSON,然后逐键、逐索引进行比较。只出现在右侧的键为新增,只出现在左侧的键为删除,两侧都存在但值不同的键为修改。对象键的顺序不重要,重要的只是值。
工作原理
两侧都会先经过 JSON.parse,因此如果其中一方不是有效的 JSON,你会得到解析器自身指出问题所在的错误消息,而不是一份毫无意义的差异结果。然后,比较过程会递归遍历两个解析后的结构:对于对象,会取两个键集合的并集并对每个键递归比较;对于数组,会逐个索引进行比较;叶子值只有在序列化结果完全一致时才被视为相等。每一处差异都会以类似 user.address[1].zip 的路径形式输出,并标记为新增、删除或修改,最后汇总成计数。
由于差异比较是针对解析后的值而非文本进行的,格式差异是不可见的:缩进、键的顺序以及空白字符的差异都不会产生任何噪音,这正是相较于基于行的文本差异工具的核心优势所在。需要理解的一个权衡是数组的对齐方式。它是按位置比较的,因此在一个较长的数组开头插入一个元素,会导致后面每个索引都被报告为「已修改」,外加末尾一处新增。当你看到一大片看起来整体错位了一位的修改条目时,应把它理解为「这个数组早期插入或删除了某个元素」,而不是数十处独立的编辑。
解析和比较都完全在这个页面的 JavaScript 中进行。打开开发者工具的 Network 标签页并点击「比较」:不会有任何请求携带你的 JSON,因此包含密钥的 API 响应和配置文件都只留在你的电脑上。