什么是 JSON Schema
JSON Schema 是一个用于描述和验证 JSON 数据结构的标准。它定义了 JSON 对象的属性、类型、约束和默认值。
示例 JSON Schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "integer", "minimum": 0 },
"email": { "type": "string", "format": "email" },
"tags": { "type": "array", "items": { "type": "string" } }
},
"required": ["name", "email"]
}
为什么需要 JSON Schema
- API 文档:自动生成 API 请求/响应的结构文档
- 数据验证:在运行时验证 JSON 数据的正确性
- 表单生成:基于 Schema 自动生成表单 UI
- Mock 数据:根据 Schema 生成测试数据
- 类型安全:为 TypeScript 接口生成类型定义
- 配置验证:验证配置文件的格式是否正确
JSON Schema 核心关键字
| 关键字 | 说明 | 示例 |
|--------|------|------|
| type | 数据类型 | "string", "number", "boolean", "array", "object" |
| properties | 对象属性 | { "name": { "type": "string" } } |
| required | 必填字段 | ["name", "email"] |
| minimum/maximum | 数值范围 | "minimum": 0, "maximum": 100 |
| minLength/maxLength | 字符串长度 | "minLength": 1, "maxLength": 255 |
| enum | 枚举值 | ["active", "inactive", "pending"] |
| format | 格式验证 | "email", "uri", "date-time" |
| items | 数组元素类型 | { "type": "string" } |
如何使用在线工具
使用 DevToolkit Pro 的 JSON Schema 生成器:
- 粘贴一个 JSON 对象示例
- 工具自动分析数据结构
- 生成完整的 JSON Schema
- 支持自定义约束(必填、范围等)
- 一键复制 Schema 代码
从 JSON 示例自动生成
输入
{
"id": 1,
"name": "张三",
"email": "zhang@example.com",
"isActive": true,
"tags": ["developer", "admin"],
"address": {
"city": "上海",
"zip": "200000"
}
}
输出 Schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
"email": { "type": "string" },
"isActive": { "type": "boolean" },
"tags": { "type": "array", "items": { "type": "string" } },
"address": {
"type": "object",
"properties": {
"city": { "type": "string" },
"zip": { "type": "string" }
}
}
}
}
代码中的 JSON Schema 验证
JavaScript(Ajv)
const Ajv = require('ajv');
const ajv = new Ajv();
const schema = {
type: 'object',
properties: {
name: { type: 'string', minLength: 1 },
age: { type: 'integer', minimum: 0 }
},
required: ['name']
};
const validate = ajv.compile(schema);
const valid = validate({ name: '张三', age: 28 });
console.log(valid); // true
Python
from jsonschema import validate, ValidationError
schema = {
"type": "object",
"properties": {
"name": {"type": "string", "minLength": 1},
"age": {"type": "integer", "minimum": 0}
},
"required": ["name"]
}
try:
validate(instance={"name": "张三", "age": 28}, schema=schema)
print("验证通过")
except ValidationError as e:
print(f"验证失败: {e.message}")
FAQ
JSON Schema 支持哪些版本?
当前最常用的是 Draft 7(2018-02)和 2020-12 版本。Draft 7 兼容性最好,建议优先使用。大部分验证库都支持 Draft 7。
Schema 和 TypeScript 接口可以互转吗?
可以。使用 typescript-json-schema 从 TS 生成 Schema,或使用 json-schema-to-typescript 从 Schema 生成 TS 接口。工具可自动化这个过程。
JSON Schema 能验证嵌套对象吗?
可以。JSON Schema 天然支持嵌套对象定义,使用递归的 properties 描述深层结构。也支持 $ref 关键字引用已定义的子 Schema,避免重复定义。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。
相关文章
YAML JSON 转换完全指南:原理、工具与最佳实践
深入理解 YAML 和 JSON 的区别与联系,掌握 YAML JSON 双向转换的各种方法——在线工具、命令行、代码实现,以及常见陷阱和最佳实践。
在线 XML/JSON 转换器:数据格式互转工具
学习如何在 XML 和 JSON 格式之间转换数据。了解 XML 和 JSON 的特点差异,以及在 API 集成、配置管理和数据交换中的应用场景。
在线 Markdown 预览器:实时渲染和编辑 Markdown 文档
学习如何使用在线 Markdown 预览器实时渲染 Markdown 文档。了解 Markdown 语法、GFM 扩展、表格和代码高亮,以及在技术文档中的最佳实践。