JSON 对比
粘两份 JSON,路径级差异立刻出现——不用点按钮,不上传。
差异结果0新增路径0修改值0删除路径
使用方法
- 把改动前的 JSON 粘进「原始 JSON」,改动后的粘进「对比 JSON」——每一条新增 / 删除 / 修改路径随输入出现,没有比较按钮。
- 键序、1 与 1.0、1e0 与 1、\u00e9 与 é 都不算差异:这里比的是结构。要看格式或键序变化,请用文本对比工具。
- 点「复制差异」把完整清单带走:每行是 +、- 或 ~ 加路径与完整值,可以直接贴进工单或邮件。
示例
两份文档
【原始】
{"订单号":"A-2026-001","客户":{"姓名":"李娜","城市":"上海"},"金额":1299.5,"已支付":false}
【对比】
{"订单号":"A-2026-001","客户":{"姓名":"李娜","城市":"北京"},"金额":1399.0,"已支付":true,"优惠券":"WELCOME10"}差异
+ $.优惠券 "WELCOME10" ~ $.客户.城市 "上海" → "北京" ~ $.金额 1299.5 → 1399.0 ~ $.已支付 false → true (+1 ~3 −0)
【原始】/【对比】只是示例标题,真实使用时两份文档分别放进两个输入框。示例只列真实值变化:没变的订单号与客户姓名不出现,键序永远不会被当成差异;中文页默认开启「兼容全角标点」,所以原始里那串全角冒号/逗号也能直接解析。
口径、上限与已知问题
- 这是结构对比,不是文本对比:对象键序无关;1、1.0、1e0 是同一个数;"\u00e9" 与 "é" 是同一个字符串。要看格式或键序变化,请用文本对比工具。
- 数字按精确十进制比较,不经过 JavaScript 的 Number:9007199254740993 不会丢位,1e400 不会变成 Infinity;清单里仍按你写的原文显示数字。
- 字符串按解码后的值比较,显示时用标准 JSON 形式重新转义;重复键与 JSON.parse 一样取最后一个值,并提示重复处数。
- 数组是有序的:插入 / 删除会先对齐,所以在头部插入一项只出一条「+」,不会把后面每一项都标成变化。移动会显示为一删一增;不提供「忽略数组顺序」。
- 新增或删除整棵子树只算一条路径。屏幕上过长的值会显示成「对象 · N 个键」或「数组 · N 项」,「复制差异」里始终是完整值。
- 「复制差异」是纯文本清单(+ / - / ~ + 路径 + 完整值),不是 JSON Patch。数组增删会让后续下标移位,naive 的 JSON Patch 会应用失败,所以不冒充标准。
- 路径用 $.a.b[0] 形式。删除项指向旧文档的下标;新增与修改项指向新文档。
- 上限:两份合计超过 20 万字符时,结果在停止输入约 0.6 秒后更新;单份超过 100 万字符或嵌套超过 256 层直接报错,不截断。数组超过对齐上限时按下标逐一比较并提示;屏幕最多渲染 400 条变更,复制始终是完整清单。
- 不上传文件、不从 URL 加载、不做 JSON Schema / JSONPath 查询、不保存历史、不生成分享链接;所有计算都在浏览器里完成。
- 中文 / 日文 / 韩文页的「兼容全角标点」默认开启:只把字符串外的全角标点折成 ASCII,字符串内部原样保留。
相关开发工具
两份 JSON 对比完之后,通常还会用到。