在线 JSON Diff 工具:比较和分析 JSON 数据差异
什么是 JSON Diff
JSON Diff 是比较两个 JSON 数据结构并找出差异的过程。它能识别出两个 JSON 对象之间的新增、删除和修改。把两段数据贴进我们的 JSON Diff 工具,即可并排高亮显示所有差异。
比较示例
原始 JSON:
{
"name": "张三",
"age": 28,
"hobbies": ["reading", "gaming"]
}
修改后的 JSON:
{
"name": "张三",
"age": 29,
"hobbies": ["reading", "coding"],
"email": "zhang@example.com"
}
Diff 结果:
{
"age": { "old": 28, "new": 29 },
"hobbies[1]": { "old": "gaming", "new": "coding" },
"email": { "added": "zhang@example.com" }
}
为什么需要 JSON Diff
- API 响应验证:比较 API 返回值与预期值
- 配置变更检测:对比配置文件的修改
- 数据迁移验证:确认数据迁移的正确性
- 代码审查:比较两个版本的 JSON 输出
- 自动化测试:在测试中断言数据变化
- 版本控制:追踪 JSON 数据的变更历史
Diff 结果类型
| 变更类型 | 说明 | 标识 |
|---------|------|------|
| 新增 | 键不存在于原始 JSON | + 或 added |
| 删除 | 键存在于原始但不在修改后 | - 或 deleted |
| 修改 | 键存在但值不同 | ~ 或 changed |
| 未变 | 键和值都相同 | 无标记 |
如何使用在线工具
使用 ToolVault 工具匣 的 JSON Diff 工具:
- 在左侧输入原始 JSON
- 在右侧输入修改后的 JSON
- 工具自动比较并高亮显示差异
- 显示新增、删除、修改的具体内容
- 支持复制 Diff 结果
代码中的 JSON Diff
JavaScript
// 深度比较两个对象
function deepDiff(oldObj, newObj, path = '') {
const diffs = {};
const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);
for (const key of allKeys) {
const currentPath = path ? `${path}.${key}` : key;
if (!(key in oldObj)) {
diffs[currentPath] = { type: 'added', value: newObj[key] };
} else if (!(key in newObj)) {
diffs[currentPath] = { type: 'deleted', value: oldObj[key] };
} else if (typeof oldObj[key] === 'object' && typeof newObj[key] === 'object') {
Object.assign(diffs, deepDiff(oldObj[key], newObj[key], currentPath));
} else if (oldObj[key] !== newObj[key]) {
diffs[currentPath] = { type: 'changed', old: oldObj[key], new: newObj[key] };
}
}
return diffs;
}
Python
def deep_diff(old, new, path=''):
diffs = {}
all_keys = set(list(old.keys()) + list(new.keys()))
for key in all_keys:
current_path = f"{path}.{key}" if path else key
if key not in old:
diffs[current_path] = {'type': 'added', 'value': new[key]}
elif key not in new:
diffs[current_path] = {'type': 'deleted', 'value': old[key]}
elif isinstance(old[key], dict) and isinstance(new[key], dict):
diffs.update(deep_diff(old[key], new[key], current_path))
elif old[key] != new[key]:
diffs[current_path] = {'type': 'changed', 'old': old[key], 'new': new[key]}
return diffs
FAQ
JSON Diff 能处理大文件吗?
取决于工具实现。简单的内存比较对大文件(>10MB)可能较慢。推荐使用流式 Diff 算法或专门的库(如 deep-diff、jsondiffpatch)。
Diff 结果可以合并吗?
有些工具支持「合并」功能,将 Diff 结果应用到原始 JSON 上。但这需要 Diff 结果包含完整的变更信息(旧值和新值)。
数组顺序变化怎么处理?
数组 Diff 有两种策略:按位置比较(简单但可能不准确)和按内容比较(更智能但更复杂)。选择取决于你的使用场景。
本文由 ToolVault 工具匣 提供。更多开发者工具请访问 首页。
相关工具
相关文章
HTML 表格转 JSON 怎么保留行列结构?
把网页里的 HTML 表格转成 JSON,怎么保留表头、处理合并单元格、保持嵌套结构?逐步方法并附本站 HTML 表格转 JSON 工具。
Excel 转 JSON 后日期变成数字 / 中文乱码,怎么办?
把 Excel 转成 JSON 时日期变 44927 这种数字、中文乱码、空单元格丢失怎么办?讲清 Excel 日期序列号与编码坑,并附本站 Excel 转 JSON 工具。
表格数据互转完全指南:Excel、CSV、JSON、Markdown、HTML 一站式转换
Excel、CSV、JSON、Markdown、HTML 五种表格格式互转全解析:各格式特点、转换场景、在线工具实操与常见陷阱,12 个免费在线转换器一站搞定。