JSON对比 在线比较两个JSON文件差异
在线JSON对比工具:并排比较两个JSON文档,高亮新增、删除和修改,支持复制差异结果,适合接口调试、数据校验和代码审查。
更新于 2026-08-16
相关工具
功能特性
- 实时对比:粘贴两个 JSON 文档,输入时差异即时更新
- 树形差异视图三色高亮:绿色 + 表示新增键、红色 − 表示删除、黄色 ~ 表示修改
- 路径级差异定位:每个差异都标注完整路径,如 a.b[2].c
- 差异统计:结果头部显示新增、删除与修改的数量
- 对象键顺序不敏感:键相同但顺序不同的两个对象视为相等
- 智能数组对比:优先按 id 或 name 值配对对象元素,剩余元素按索引比较
- 仅显示差异模式:折叠相同部分,专注查看真正改变的内容
- 一键复制差异文本:可直接粘贴到工单、Pull Request 或聊天消息中
- 从磁盘打开 .json 文件,或直接拖拽到面板上
- 支持大型嵌套结构:深层嵌套的对象和数组无深度限制地比较
使用方法
- 1将原始 JSON 粘贴到左侧面板(JSON A),更新后的版本粘贴到右侧面板(JSON B)。
- 2差异会随输入实时更新:新增键显示绿色、删除显示红色、修改显示黄色。
- 3切换'仅显示差异'隐藏相同部分,只看变化;切回'显示全部'查看完整树形结构。
- 4查看结果头部的统计徽章:+N 新增、−N 删除、~N 修改。
- 5点击复制差异可将所有变更的纯文本摘要复制到剪贴板,或点击保存下载为文件。
- 6对比 API 响应变更:部署前后各抓取一次响应,验证没有意外破坏。
- 7验证配置文件迁移:对比新旧配置,确认到底新增或删除了哪些字段。
- 8审查同事 PR 中的数据改动:并排粘贴新旧数据,快速发现非预期修改。
- 9使用打开文件按钮或拖拽方式加载 .json 文件,无需手动粘贴。
- 10修复无效 JSON:面板中的红色错误提示会指出解析问题,对应行会在行号区高亮。
常见问题
如何比较两个 JSON 文件?
将原始文档粘贴到左侧面板(JSON A),把修改后的文档粘贴到右侧面板(JSON B),下方会立即显示差异树:绿色 + 表示新增键、红色 − 表示删除键、黄色 ~ 表示修改的值。也可以使用打开文件按钮或拖拽方式加载文件。
新增、删除、修改分别是什么意思?
新增表示该键只存在于 JSON B;删除表示该键只存在于 JSON A;修改表示键两边都有但值不同(或类型不同,例如字符串变成了数字)。未变化的部分在'显示全部'模式下显示为灰色,在'仅显示差异'模式下被隐藏。
数组是如何比较的?
对象元素会先按相同的 id 或 name 值配对,因此重新排序的记录列表仍然清晰可读:只有真正改变的字段会被高亮。没有匹配 id/name 的元素按索引比较:如果 item[0] 被一个完全不同的对象替换,所有字段都会显示为修改。纯值数组(如 [1,2,3])始终按索引比较,元素移动到其他位置会显示为该位置的修改(例如 [1,2,3] 对比 [1,3,2] 显示索引 1 和 2 被修改),长度不一致时多出或缺少的索引会显示为新增或删除。
对象键的顺序不同算差异吗?
不算。对象按键比较,与键在文本中出现的顺序无关。{"a":1,"b":2} 和 {"b":2,"a":1} 被视为相同,因此重新排序的格式化文件不会产生误报。
数组元素的顺序不同算差异吗?
取决于元素类型,这一点与对象不同。对于对象数组,具有匹配 id 或 name 值的元素会先配对,单纯的顺序调整不算差异;对于纯值数组(数字、字符串、布尔值)以及无法配对的元素,位置就很重要:按索引比较,移动位置的元素会显示为新索引处的修改,长度不一致时多出或缺少的索引会显示为新增或删除。
能用这个工具合并两个 JSON 文档吗?
不能。这是纯对比工具:它只显示差异,不生成合并后的文档。如果需要合并,请以差异结果为指导在编辑器中手动应用修改,或在你的项目中使用专门的 JSON 合并库。
大型 JSON 文件会卡吗?
几 MB 以内的文档在多数浏览器中都是即时对比。超大文件渲染完整树形视图可能会变慢,切换到'仅显示差异'模式可以减小输出。对于数百 MB 级别的文件,建议改用命令行工具:分别执行 jq -S . 文件1.json > f1.sorted.json(文件 2 同理),再运行 diff f1.sorted.json f2.sorted.json。
两侧的 JSON 都无效怎么办?
每个面板独立校验。无效的面板会显示红色错误提示和解析器消息,并在行号区高亮出错行,另一侧面板不受影响继续使用。只有当两侧都解析成功时,差异结果面板才会比较。
和文本对比工具(text-diff-checker)有什么区别?
文本对比是按行比较,一次格式化重排就会产生大量噪音差异。本工具会解析两侧文档并做结构化语义比较:键顺序、空白和格式都被忽略,每个差异都以 data.items[2].price 这样的语义路径报告。
为什么差异里显示了我没改过的内容?
常见三类原因:(1) 类型不匹配:"1"(字符串)和 1(数字)、null 和 "" 看起来一样,但会显示为修改;(2) 数组重排:纯值数组按索引比较,移动元素会被标记为修改;(3) 字符串值内的尾随空格或换行会被当成差异,而缩进和键顺序会被忽略。查看黄色 ~ 的路径,新旧值会并排显示。
对比两个 JSON 文件最方便的方式是什么?
分场景:临时对比一次,把两边粘贴到这里看 +/−/~ 路径最直观;自动化或 CI 场景先把两个文件用 jq -S . 排序再跑 diff;在 git 里,git diff 或 VS Code 的对比视图也能友好展示 JSON 差异。三者思路一致:比较结构而不是格式。
能对比 JSONL 文件吗?
不能。每个输入必须是单个有效的 JSON 文档,而 JSONL(JSON Lines)每行是一个独立文档。要对比 JSONL 文件,请使用文本对比工具逐行比较,或先用 jq 转换:jq -c . file.jsonl > normalized.jsonl,再做文本对比。
为什么用这个在线 json对比 工具对比压缩过的 JSON 那么难读?
压缩后的 JSON 整个文档只有一行,任何结构变化都会让这一行看起来完全不同。本工具会解析两侧并做结构化对比,仍然能精确定位变化的路径。但先把两侧美化(pretty-print)再对比,结果会易读得多。建议先用 JSON 格式化工具美化后再对比。
为什么这个 json对比工具在线 显示整个对象都变了,明明只改了一个字段?
结构化对比在任意子节点发生变化时,会报告从根节点开始的完整路径:类似 data.items[2].price。这不是错误:路径上的每个对象都会被标记,方便你定位到变化位置。实际上只有叶节点的值不同,相同的值永远不会被标记。