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 數據再使用本工具。