示例
本节提供使用 JSON 差异对比工具进行各种实际场景的实用示例。每个示例都演示了 JSON 比较和变更检测的不同方面。
用户数据比较
场景:用户配置文件更新
比较用户配置文件数据在更新前后的变化,以跟踪用户信息的变化。
JSON A(原始配置文件)
{
"id": 12345,
"name": "张三",
"email": "zhangsan@example.com",
"age": 28,
"address": {
"street": "朝阳区123号",
"city": "北京",
"state": "北京",
"zipCode": "100000"
},
"preferences": {
"theme": "light",
"notifications": true,
"language": "zh"
},
"hobbies": ["读书", "游泳", "摄影"]
}
JSON B(更新后的配置文件)
{
"id": 12345,
"name": "张三丰",
"email": "zhangsanfeng@example.com",
"age": 29,
"address": {
"street": "海淀区456号",
"city": "上海",
"state": "上海",
"zipCode": "200000"
},
"preferences": {
"theme": "dark",
"notifications": false,
"language": "zh"
},
"hobbies": ["读书", "游泳", "摄影", "烹饪"],
"lastUpdated": "2024-01-15T10:30:00Z"
}
预期结果
- 已修改:name、email、age、address(所有字段)、preferences.theme、preferences.notifications
- 已添加:lastUpdated、hobbies3(烹饪)
- 未变更:id、preferences.language、hobbies0-2
API 响应比较
场景:API 版本变更
比较不同版本之间的 API 响应,以识别破坏性变更和新功能。
JSON A(API v1.0)
{
"status": "success",
"code": 200,
"data": {
"users": [
{
"id": 1,
"name": "张三",
"role": "admin",
"permissions": ["read", "write"]
},
{
"id": 2,
"name": "李四",
"role": "user",
"permissions": ["read"]
}
],
"total": 2,
"page": 1
},
"message": "用户获取成功"
}
JSON B(API v2.0)
{
"status": "success",
"code": 200,
"data": {
"users": [
{
"id": 1,
"name": "张三",
"role": "admin",
"permissions": ["read", "write", "delete"],
"lastLogin": "2024-01-15T09:15:00Z",
"isActive": true
},
{
"id": 2,
"name": "李四",
"role": "user",
"permissions": ["read"],
"lastLogin": "2024-01-14T16:45:00Z",
"isActive": true
},
{
"id": 3,
"name": "王五",
"role": "moderator",
"permissions": ["read", "moderate"],
"lastLogin": "2024-01-15T08:30:00Z",
"isActive": true
}
],
"total": 3,
"page": 1,
"limit": 10,
"hasMore": false
},
"message": "用户获取成功",
"version": "2.0",
"timestamp": "2024-01-15T10:00:00Z"
}
预期结果
- 已修改:data.users0.permissions、data.users1.permissions、data.total
- 已添加:data.users0.lastLogin、data.users0.isActive、data.users1.lastLogin、data.users1.isActive、data.users2(整个新用户)、data.limit、data.hasMore、version、timestamp
- 未变更:status、code、data.page、message
配置文件比较
场景:应用程序配置变更
比较应用程序配置文件,以跟踪环境特定的变更和更新。
JSON A(开发配置)
{
"app": {
"name": "我的应用",
"version": "1.0.0",
"environment": "development",
"debug": true
},
"database": {
"host": "localhost",
"port": 5432,
"name": "myapp_dev",
"ssl": false
},
"api": {
"baseUrl": "http://localhost:3000",
"timeout": 5000,
"retries": 3
},
"logging": {
"level": "debug",
"file": "logs/dev.log"
}
}
JSON B(生产配置)
{
"app": {
"name": "我的应用",
"version": "1.0.0",
"environment": "production",
"debug": false
},
"database": {
"host": "prod-db.example.com",
"port": 5432,
"name": "myapp_prod",
"ssl": true,
"pool": {
"min": 5,
"max": 20
}
},
"api": {
"baseUrl": "https://api.myapp.com",
"timeout": 10000,
"retries": 5,
"rateLimit": {
"windowMs": 900000,
"max": 100
}
},
"logging": {
"level": "info",
"file": "logs/prod.log",
"rotation": {
"maxSize": "10MB",
"maxFiles": 5
}
},
"monitoring": {
"enabled": true,
"endpoint": "https://monitoring.myapp.com"
}
}
预期结果
- 已修改:app.environment、app.debug、database.host、database.name、database.ssl、api.baseUrl、api.timeout、api.retries、logging.level、logging.file
- 已添加:database.pool、api.rateLimit、logging.rotation、monitoring
- 未变更:app.name、app.version、database.port
数据迁移比较
场景:数据库模式迁移
比较数据库模式迁移前后的数据结构,以确保数据完整性。
JSON A(迁移前)
{
"users": [
{
"user_id": 1,
"username": "zhangsan",
"email_address": "zhangsan@example.com",
"created_at": "2023-01-15",
"profile_data": {
"first_name": "三",
"last_name": "张",
"phone": "+86-138-0013-8000"
}
},
{
"user_id": 2,
"username": "lisi",
"email_address": "lisi@example.com",
"created_at": "2023-02-20",
"profile_data": {
"first_name": "四",
"last_name": "李",
"phone": "+86-138-0013-8001"
}
}
]
}
JSON B(迁移后)
{
"users": [
{
"id": 1,
"username": "zhangsan",
"email": "zhangsan@example.com",
"createdAt": "2023-01-15T00:00:00Z",
"profile": {
"firstName": "三",
"lastName": "张",
"phoneNumber": "+86-138-0013-8000",
"displayName": "张三"
},
"metadata": {
"migratedAt": "2024-01-15T10:00:00Z",
"migrationVersion": "2.0"
}
},
{
"id": 2,
"username": "lisi",
"email": "lisi@example.com",
"createdAt": "2023-02-20T00:00:00Z",
"profile": {
"firstName": "四",
"lastName": "李",
"phoneNumber": "+86-138-0013-8001",
"displayName": "李四"
},
"metadata": {
"migratedAt": "2024-01-15T10:00:00Z",
"migrationVersion": "2.0"
}
}
]
}
预期结果
- 已修改:users0.user_id → users0.id、users0.email_address → users0.email、users0.created_at → users0.createdAt、users0.profile_data → users0.profile、users1(相同变更)
- 已添加:users0.profile.displayName、users0.metadata、users1.profile.displayName、users1.metadata
- 未变更:users0.username、users1.username
数组比较示例
场景:购物车变更
比较购物车内容,以跟踪商品添加、删除和数量变更。
JSON A(原始购物车)
{
"cartId": "cart_123",
"items": [
{
"productId": "prod_001",
"name": "笔记本电脑",
"price": 9999.99,
"quantity": 1
},
{
"productId": "prod_002",
"name": "鼠标",
"price": 299.99,
"quantity": 2
}
],
"total": 10599.97,
"currency": "CNY"
}
JSON B(更新后的购物车)
{
"cartId": "cart_123",
"items": [
{
"productId": "prod_001",
"name": "笔记本电脑",
"price": 8999.99,
"quantity": 1
},
{
"productId": "prod_002",
"name": "鼠标",
"price": 299.99,
"quantity": 3
},
{
"productId": "prod_003",
"name": "键盘",
"price": 799.99,
"quantity": 1
}
],
"total": 10899.96,
"currency": "CNY",
"discount": {
"code": "SAVE10",
"amount": 1089.996
}
}
预期结果
- 已修改:items0.price、items1.quantity、total
- 已添加:items2(新键盘商品)、discount
- 未变更:cartId、items0.productId、items0.name、items0.quantity、items1.productId、items1.name、items1.price、currency
类型变更示例
场景:数据类型演进
比较 JSON 对象,其中值在不同数据类型之间变化。
JSON A(基于字符串的 ID)
{
"user": {
"id": "12345",
"age": "25",
"isActive": "true",
"score": "95.5",
"tags": "admin,premium,verified"
}
}
JSON B(类型化值)
{
"user": {
"id": 12345,
"age": 25,
"isActive": true,
"score": 95.5,
"tags": ["admin", "premium", "verified"]
}
}
预期结果
- 类型变更:id(字符串 → 数字)、age(字符串 → 数字)、isActive(字符串 → 布尔值)、score(字符串 → 数字)、tags(字符串 → 数组)
- 未变更:所有属性名和逻辑值
复杂嵌套比较
场景:多级对象变更
比较深度嵌套的对象,在多个级别都有变更。
JSON A(复杂结构)
{
"company": {
"info": {
"name": "科技公司",
"founded": 2020,
"employees": 50
},
"departments": {
"engineering": {
"head": "张三",
"size": 20,
"projects": ["项目A", "项目B"]
},
"marketing": {
"head": "李四",
"size": 10,
"campaigns": ["活动1"]
}
},
"settings": {
"timezone": "UTC",
"language": "zh"
}
}
}
JSON B(更新后的结构)
{
"company": {
"info": {
"name": "科技公司股份有限公司",
"founded": 2020,
"employees": 75,
"revenue": 1000000
},
"departments": {
"engineering": {
"head": "张三",
"size": 30,
"projects": ["项目A", "项目B", "项目C"],
"budget": 500000
},
"marketing": {
"head": "王五",
"size": 15,
"campaigns": ["活动1", "活动2"]
},
"sales": {
"head": "赵六",
"size": 20,
"targets": ["Q1", "Q2", "Q3", "Q4"]
}
},
"settings": {
"timezone": "CST",
"language": "zh",
"currency": "CNY"
}
}
}
预期结果
- 已修改:company.info.name、company.info.employees、company.departments.engineering.size、company.departments.engineering.projects、company.departments.marketing.head、company.departments.marketing.size、company.departments.marketing.campaigns、company.settings.timezone
- 已添加:company.info.revenue、company.departments.engineering.budget、company.departments.sales、company.settings.currency
- 未变更:company.info.founded、company.departments.engineering.head、company.settings.language
示例最佳实践
创建有效的比较
- 使用真实数据:基于您项目中的实际用例创建示例
- 显示进展:演示数据如何随时间演变
- 包含边缘情况:展示工具如何处理异常场景
- 记录期望:清楚说明应该检测到哪些变更
从示例中学习
- 从简单开始:从基本的对象比较开始
- 进展到复杂:逐渐使用更复杂的嵌套结构
- 测试边缘情况:尝试不同的数据类型和结构
- 保存重要示例:使用历史记录保存有用的比较模式
这些示例展示了 JSON 差异对比工具在各种场景中的多功能性,从简单的数据更新到复杂的系统迁移。将它们作为您自己比较的起点,并根据您的特定需求进行调整。