JSON Schema 是一种用于验证和描述 JSON 数据结构的规范。它允许你定义 JSON 数据的结构、类型、格式和约束,从而确保数据的完整性和一致性。JSON Schema 可以用于数据验证、文档生成、代码生成等多种用途。
JSON Schema 基本结构
一个 JSON Schema 通常包含以下几个部分:
$schema
:指定使用的 JSON Schema 版本。type
:定义数据的类型,例如object
、array
、string
、number
等。properties
:定义对象的属性及其类型和约束。required
:指定哪些属性是必需的。items
:定义数组的元素类型和约束。additionalProperties
:控制对象是否允许额外的属性。
示例
下面是一个简单的 JSON Schema 示例,用于描述一个用户对象:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"email": {
"type": "string",
"format": "email"
},
"age": {
"type": "integer",
"minimum": 0
},
"isActive": {
"type": "boolean"
}
},
"required": ["id", "name", "email"]
}
解释
$schema
:指定使用的 JSON Schema 版本,这里使用的是 Draft 07。type
:定义数据类型为object
。properties
:定义对象的属性:id
:类型为integer
。name
:类型为string
。email
:类型为string
,并且格式为email
。age
:类型为integer
,并且最小值为 0。isActive
:类型为boolean
。
required
:指定id
、name
和email
是必需的属性。
使用 JSON Schema 进行验证
你可以使用各种库来根据 JSON Schema 验证 JSON 数据。例如,在 JavaScript 中,你可以使用 ajv
库:
npm install ajv
然后在代码中使用:
const Ajv = require('ajv');
const ajv = new Ajv();
const schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"email": {
"type": "string",
"format": "email"
},
"age": {
"type": "integer",
"minimum": 0
},
"isActive": {
"type": "boolean"
}
},
"required": ["id", "name", "email"]
};
const data = {
id: 1,
name: "John Doe",
email: "john.doe@example.com",
age: 30,
isActive: true
};
const validate = ajv.compile(schema);
const valid = validate(data);
if (valid) {
console.log('Data is valid');
} else {
console.log('Data is invalid:', validate.errors);
}
通过这种方式,你可以使用 JSON Schema 来确保 JSON 数据的结构和内容符合预期。