# JSON模式校验器

验证JSON数据是否符合JSON Schema结构定义

> 标准页面: https://elysiatools.com/zh/tools/json-schema-validator

- **分类:** Validation

- **关键词:** json, schema, 验证器, 校验, 结构, 数据, 格式

## 概述

# JSON模式校验器

## 概述

JSON模式校验器是一个强大的工具，用于根据预定义的模式验证JSON数据。它确保您的JSON数据符合预期的结构、数据类型和约束条件。

## 功能

### 支持的JSON Schema关键字

- **type**: 验证数据类型（string、number、integer、boolean、array、object、null）
- **properties**: 定义对象属性的模式
- **required**: 指定必需的对象属性
- **additionalProperties**: 控制是否允许额外的属性
- **items**: 定义数组项的模式（单个模式或元组验证）
- **minItems / maxItems**: 设置数组长度约束
- **uniqueItems**: 要求所有数组项唯一
- **enum**: 将值限制为特定集合
- **const**: 要求精确的常量值
- **minimum / maximum**: 设置数值范围约束
- **exclusiveMinimum / exclusiveMaximum**: 排他性数值边界
- **multipleOf**: 要求值是某个数字的倍数
- **minLength / maxLength**: 设置字符串长度约束
- **pattern**: 根据正则表达式验证字符串
- **format**: 验证内置格式（email、uri等）
- **allOf**: 数据必须匹配所有子模式
- **anyOf**: 数据必须匹配至少一个子模式
- **oneOf**: 数据必须恰好匹配一个子模式
- **$ref**: 引用另一个模式（基本支持）

## 使用示例

### 基本对象验证

**JSON数据：**
```json
{
  "name": "张三",
  "age": 30,
  "email": "zhangsan@example.com"
}
```

**JSON Schema：**
```json
{
  "type": "object",
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 },
    "email": { "type": "string", "format": "email" }
  },
  "required": ["name", "age"]
}
```

### 数组验证

**JSON数据：**
```json
{
  "tags": ["javascript", "typescript", "vue"]
}
```

**JSON Schema：**
```json
{
  "type": "object",
  "properties": {
    "tags": {
      "type": "array",
      "items": { "type": "string" },
      "minItems": 1,
      "uniqueItems": true
    }
  }
}
```

### 嵌套对象验证

**JSON数据：**
```json
{
  "user": {
    "id": 123,
    "profile": {
      "firstName": "李",
      "lastName": "四"
    }
  }
}
```

**JSON Schema：**
```json
{
  "type": "object",
  "properties": {
    "user": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "profile": {
          "type": "object",
          "properties": {
            "firstName": { "type": "string" },
            "lastName": { "type": "string" }
          },
          "required": ["firstName", "lastName"]
        }
      },
      "required": ["id", "profile"]
    }
  }
}
```

## 常见验证错误

| 错误 | 原因 | 解决方案 |
|------|------|----------|
| 缺少必需字段 | 未找到必需属性 | 添加缺失的属性 |
| 期望类型X，实际为Y | 数据类型不匹配 | 更正数据类型 |
| 不允许有额外属性 | 当设置`additionalProperties: false`时有额外属性 | 删除额外属性或允许它 |
| 字符串不匹配模式 | 正则表达式模式验证失败 | 更新字符串以匹配模式 |
| 数组必须至少有X项 | 数组太短 | 添加更多项或调整minItems |
| 值必须是以下之一 | enum约束失败 | 使用允许的值之一 |

## 支持的JSON Schema版本

- draft-04
- draft-06
- draft-07
- 2019-09
- 2020-12

## 编写有效模式的技巧

1. **使用描述性的属性名称** - 使验证错误更清晰
2. **设置适当的约束** - 在灵活性和严格性之间取得平衡
3. **记录您的模式** - 使用`description`和`title`字段
4. **测试边界情况** - 使用边界值进行验证
5. **使用`additionalProperties: false`** - 捕获属性名称中的拼写错误
6. **谨慎使用`required`** - 仅强制执行真正必填的字段

## 输入项

- **JSON数据** (textarea): 输入要验证的JSON数据（如：{"name": "John", "age": 30}）...
- **JSON Schema** (textarea): 输入JSON Schema（如：{"type": "object", "properties": {...}}）...

## 适用场景

- 在开发 API 接口时，需要验证客户端发送的 JSON 请求体是否符合接口定义的结构规范。
- 在配置系统或编写配置文件后，需要确保 JSON 配置文件没有遗漏必需字段或填入错误的数据类型。
- 在调试前端与后端交互数据时，快速定位 JSON 数据中不符合 Schema 约束的具体错误位置。

## 工作原理

- 在“JSON数据”输入框中粘贴或输入您需要验证的 JSON 数据。
- 在“JSON Schema”输入框中输入对应的 JSON Schema 结构定义。
- 校验器会自动解析并对比两者，实时输出验证结果，若有不符合规则的字段将直接指出错误原因与位置。

## 使用案例

- API 请求体结构校验：在后端接收到客户端提交的 JSON 数据前，使用 Schema 校验器确保数据完整性。
- 配置文件合规性检查：对复杂的 JSON 配置文件进行校验，防止因拼写错误或格式不符导致系统崩溃。
- 测试数据生成与验证：在编写单元测试时，验证模拟的 JSON 响应数据是否完全符合接口契约。

## 常见问题

### 这个校验器支持哪些 JSON Schema 版本？

支持 draft-04、draft-06、draft-07、2019-09 以及 2020-12 版本。

### 验证失败时会提供具体的错误位置吗？

会的第一时间指出哪个属性未通过验证，并说明具体的错误原因，例如类型不匹配或缺少必需字段。

### 如何限制 JSON 对象中不能出现未定义的额外属性？

您可以在 JSON Schema 中将 additionalProperties 属性设置为 false。

### 支持验证邮箱、URI 等特殊格式吗？

支持，您可以在 Schema 中使用 format 关键字来验证内置格式，如 email、uri 等。

### 校验器是否支持嵌套对象的验证？

支持，您可以通过在 Schema 的 properties 中嵌套定义 object 类型来验证任意深度的嵌套结构。

## 相关工具

- [身份证验证器](https://elysiatools.com/zh/tools/id-card-validator): 验证各国身份证号码的有效性并提供详细分析（JSON输出）
- [BSON转换器](https://elysiatools.com/zh/tools/bson-converter): 将数据编码/解码为BSON（Binary JSON）格式
- [CSON转JSON](https://elysiatools.com/zh/tools/cson-to-json): 将CSON（CoffeeScript对象表示法）数据转换为JSON格式
- [BOM字符移除器](https://elysiatools.com/zh/tools/data-bom-remover): 从文本和文件内容中移除BOM（字节顺序标记）字符。非常适合清理有编码问题的文本文件、修复CSV导入和为处理准备数据。 功能特点： - 检测并移除UTF-8 BOM (EF BB BF) - 检测并移除UTF-16 BOM (FE FF 或 FF FE) - 检测并移除UTF-32 BOM (00 00 FE FF 或 FF FE 00 00) - 支持多种输入格式 - 可视化BOM字符显示 - 详细检测报告 - 支持批量文本处理 常见用途： - 修复CSV文件导入错误 - 清理文本文件编码问题 - 为JSON解析准备数据 - 修复XML解析问题 - 解决API数据编码冲突 - 标准化文本数据格式
- [EDN转JSON](https://elysiatools.com/zh/tools/edn-to-json): 将EDN（可扩展数据表示法）数据转换为JSON格式
- [GraphQL转JSON](https://elysiatools.com/zh/tools/graphql-to-json): 将GraphQL查询或响应数据转换为JSON格式
- [JSON格式化](https://elysiatools.com/zh/tools/json-formatter): 格式化和验证JSON数据
- [JSON转CSON](https://elysiatools.com/zh/tools/json-to-cson): 将JSON数据转换为CSON（CoffeeScript对象表示法）格式

## 示例

- [JSON 示例](https://elysiatools.com/zh/samples/json): JSON（JavaScript 对象表示法）格式示例，从简单到复杂结构
- [Terraform Plan JSON 样本](https://elysiatools.com/zh/samples/terraform-plan-json-samples): 用于依赖可视化和变更审查的 Terraform plan JSON 文件样本，贴近 terraform show -json 输出结构
- [聊天记录 JSON 示例](https://elysiatools.com/zh/samples/chat-transcript-json): 多角色聊天记录的 JSON 示例
- [富媒体 JSON 示例](https://elysiatools.com/zh/samples/rich-media-json): 常见富文本编辑器（TipTap、Quill、Slate）的 JSON 示例

## 相关内容

- [API 契约定义、Schema 校验与变更测试](https://elysiatools.com/zh/hubs/api-contract-testing): 定义 API 契约，校验 Schema 和已捕获载荷，识别兼容性风险，并记录测试验收结果。
- [JSON Schema 与 API 契约校验工具](https://elysiatools.com/zh/hubs/json-validate): 在一个专题中比较 JSON Schema 校验、OpenAPI 响应检查、变异测试、压力测试和破坏性变更检测工具，适合 API 契约审查流程。
- [JSON 实用、检查与转换工具](https://elysiatools.com/zh/hubs/json-utility): 为 API 与数据流程格式化、检查、对比、合并、转换、校验、分析并水印 JSON 负载。
