w

示例

本节提供使用 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

示例最佳实践

创建有效的比较

  1. 使用真实数据:基于您项目中的实际用例创建示例
  2. 显示进展:演示数据如何随时间演变
  3. 包含边缘情况:展示工具如何处理异常场景
  4. 记录期望:清楚说明应该检测到哪些变更

从示例中学习

  1. 从简单开始:从基本的对象比较开始
  2. 进展到复杂:逐渐使用更复杂的嵌套结构
  3. 测试边缘情况:尝试不同的数据类型和结构
  4. 保存重要示例:使用历史记录保存有用的比较模式

这些示例展示了 JSON 差异对比工具在各种场景中的多功能性,从简单的数据更新到复杂的系统迁移。将它们作为您自己比较的起点,并根据您的特定需求进行调整。

这个页面对您有帮助吗?