JSON Schema 生成器
根据 JSON 数据自动生成符合规范的 JSON Schema 定义
// 输入 JSON 后自动生成 JSON Schema什么是 JSON Schema?
JSON Schema 是一种用于描述和验证 JSON 数据结构的规范。它定义了 JSON 文档应有的结构、数据类型、约束条件等规则,广泛应用于 API 数据验证、表单验证、配置文件校验等场景。
通过 JSON Schema,您可以:
- 数据验证:验证 JSON 数据是否符合预期的格式和约束
- 文档生成:为 API 自动生成文档和类型定义
- 代码提示:在 IDE 中获得智能补全和类型检查
- 自动化测试:在测试中自动验证响应数据格式
本工具支持 JSON Schema Draft-07 规范,能够智能推断嵌套对象、数组类型、枚举值等复杂结构,帮助您快速创建标准化的 Schema 定义。
使用方法
- 在左侧输入框粘贴 JSON 数据,或点击示例按钮加载示例数据
- 配置生成选项:设置 Schema ID、选择是否所有字段必填、是否添加默认值等
- 右侧自动生成对应的 JSON Schema 定义
- 点击「复制」按钮复制生成的 Schema 到剪贴板
- 将 Schema 用于 API 验证、表单校验或配置文件校验等场景
使用实例
简单对象 Schema
输入 JSON:
{
"name": "张三",
"age": 28,
"isActive": true
}
输出 JSON Schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "Object with 3 properties",
"properties": {
"name": {
"type": "string",
"description": "String value"
},
"age": {
"type": "integer",
"description": "Number value"
},
"isActive": {
"type": "boolean",
"description": "Boolean value"
}
},
"required": ["name", "age", "isActive"]
}嵌套对象与数组
输入 JSON:
{
"user": {
"id": 1,
"profile": {
"avatar": "url",
"skills": ["JS", "TS"]
}
}
}
输出 JSON Schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"id": { "type": "integer" },
"profile": {
"type": "object",
"properties": {
"avatar": { "type": "string" },
"skills": {
"type": "array",
"items": { "type": "string" }
}
}
}
}
}
}
}数据验证示例
使用 Ajv 验证数据:
const Ajv = require('ajv');
const ajv = new Ajv();
const schema = { /* 生成的 Schema */ };
const validate = ajv.compile(schema);
const validData = { name: "李四", age: 25, isActive: false };
const invalidData = { name: "王五", age: "三十" };
console.log(validate(validData)); // true
console.log(validate(invalidData)); // false
console.log(validate.errors); // 错误详情常见问题 (FAQ)
Q: JSON Schema 有哪些常见应用场景?
A: JSON Schema 主要用于:API 请求/响应验证、表单数据校验、配置文件格式检查、数据库文档约束、自动化测试数据验证、IDE 智能提示配置等。它是现代 Web 开发中数据规范的重要工具。
Q: 生成的 Schema 版本是什么?
A: 本工具生成的 Schema 遵循 JSON Schema Draft-07 规范,这是目前最广泛支持的版本,兼容大多数验证库和工具链。
Q: 如何处理复杂的数组类型?
A: 工具会自动分析数组元素的结构。如果数组元素是对象,会生成 items 定义;如果元素类型不一致,会使用 anyOf 或 oneOf 表示多种可能的类型;空数组则生成空 items 定义。
Q: required 字段是什么意思?
A: required 是一个字符串数组,列出必须存在的属性名。如果某个属性在 required 中,则验证时该属性不能缺失。未在 required 中的属性为可选属性。
Q: 如何在项目中使用生成的 Schema?
A: 可以使用 Ajv、jsonschema 等验证库进行数据校验。在 Node.js 中:const Ajv = require('ajv'); const validate = new Ajv().compile(schema); const valid = validate(data);。前端框架如 React、Vue 也有对应的表单验证组件支持 JSON Schema。
Q: additionalProperties: false 有什么作用?
A: 这个设置禁止数据中出现 Schema 未定义的额外属性。这在需要严格控制数据结构的场景很有用,可以防止意外字段污染数据,但也可能过于严格导致兼容性问题。
Q: 能否为字段添加自定义验证规则?
A: 生成后可以手动编辑 Schema 添加更多约束。JSON Schema 支持丰富的验证关键字:minimum/maximum(数值范围)、minLength/maxLength(字符串长度)、pattern(正则匹配)、enum(枚举值)、format(预定义格式如 email、uri)等。
Q: 如何从 TypeScript 类型生成 JSON Schema?
A: 本工具是从 JSON 数据推断 Schema。如果需要从 TypeScript 类型生成 Schema,可以使用 typescript-json-schema 等工具,或先创建示例 JSON 数据再使用本工具。