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数据:
{
"name": "张三",
"age": 30,
"email": "[email protected]"
}
JSON Schema:
{
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "integer", "minimum": 0, "maximum": 150 },
"email": { "type": "string", "format": "email" }
},
"required": ["name", "age"]
}
数组验证
JSON数据:
{
"tags": ["javascript", "typescript", "vue"]
}
JSON Schema:
{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" },
"minItems": 1,
"uniqueItems": true
}
}
}
嵌套对象验证
JSON数据:
{
"user": {
"id": 123,
"profile": {
"firstName": "李",
"lastName": "四"
}
}
}
JSON Schema:
{
"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
编写有效模式的技巧
- 使用描述性的属性名称 - 使验证错误更清晰
- 设置适当的约束 - 在灵活性和严格性之间取得平衡
- 记录您的模式 - 使用
description和title字段
- 测试边界情况 - 使用边界值进行验证
- 使用
additionalProperties: false - 捕获属性名称中的拼写错误
- 谨慎使用
required - 仅强制执行真正必填的字段