JSON Schema
前言:
JSON Schema是用来效验json数据是否符合预期的
安装:
pip install jsonschema==4.23.0
1.json数据和json Schema对比
json数据
{"name": "张三","age": 26,"address": {"province": "上海","district": "浦东","postalCode": "200000"},"phoneNumbers": [{"type": "mobile","number": "+86-12345678912"},{"type": "office","number": "021-12345678"}]
}
json Schema:
{"$schema": "http://json-schema.org/draft-07/schema#","type": "object","properties": {"name": {"type": "string"},"age": {"type": "integer"},"address": {"type": "object","properties": {"province": {"type": "string"},"district": {"type": "string"},"postalCode": {"type": "string"}},"additionalProperties": false,"required": ["province","district","postalCode"]},"phoneNumbers": {"type": "array","items": {"type": "object","properties": {"type": {"type": "string"},"number": {"type": "string"}},"additionalProperties": false,"required": ["type","number"]}}},"additionalProperties": false,"required": ["name","age","address","phoneNumbers"]
}
2.基本结构
JSON Schema 本身是一个 JSON 对象,包含以下常见关键字:
◦ $schema:指定使用的 Schema 版本(如 "http://json-schema.org/draft-07/schema#")。
◦ type:定义数据类型(如 string、number、array、object)。
◦ properties:描述对象中的字段及其子 Schema。
◦ required:标记必填字段列表。
◦ additionalProperties:是否允许未定义的额外字段。
3.数据类型
type | 解释 |
string | 字符串类型,⽤于⽂本数据。 |
number | 数字类型,⽤于表⽰浮点数。 |
integer | 整数类型,⽤于表⽰整数。 |
boolean | 布尔类型,值为 true 或 false。 |
object | 对象类型,⽤于嵌套的 JSON 对象。 |
array | 数组类型,⽤于列表或集合。 |
null | 空值类型。 |
properties 是⼀个验证关键字。当你定义 properties 时,你创建了⼀个对象,其
中每个属性代表正在验证的 JSON 数据中的⼀个键。
4.效验:
4.1最大值和最小值
minimum 和 maximum :指定数值的最⼩值和最⼤值。
exclusiveMinimum 和 exclusiveMaximum :指定数值必须严格⼤于或⼩于某个值(不包含等于)。
示例代码:
{"type": "number","minimum": 10,"maximum": 100,"exclusiveMinimum": 9.5,"exclusiveMaximum": 101
}
4.2字符串特殊效验
pattern :使⽤正则表达式来验证字符串是否符合特定的模式。
{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"username": {
"type": "string",
"pattern": "\S+"
}
}
}
4.3数组约束
1.minItems 和 maxItems :指定数组的最⼩和最⼤⻓度。
2.uniqueItems :确保数组中的元素是唯⼀的。
3.items :定义数组中每个元素的类型和约束。
{
"type": "object",
"properties": {"tags": {"type": "array","items": { "type": "string" },"minItems": 1,"uniqueItems": True}}
}
4.4对象约束
1、minProperties 和 maxProperties :指定对象的最⼩和最⼤属性数量。
2、additionalProperties :控制是否允许对象中存在未在 properties 中定义的额外属性,默
认为True。
{"type": "object","properties": {"name": { "type": "string" }},"minProperties": 1,"additionalProperties": False
}
4.5必须属性
通过 required 关键字,JSON Schema 可以指定哪些属性是必需的。如果 JSON 实例中缺少这些必需属性,验证将失败。
{"type": "object","properties": {"name": { "type": "string" },"email": { "type": "string" }},"required": ["name", "email"]
}
4.6依赖关系
dependentRequired 可以定义属性之间的依赖关系。例如,如果某个属性存在,则必须存在另⼀个属性。
{"type": "object","properties": {"creditCard": { "type": "string" },"billingAddress": { "type": "string" }
},"dependentRequired": {"creditCard": ["billingAddress"]}
}
"creditCard"依赖于"billingAddress"
"creditCard"存在,那么"billingAddress"也一定存在,否则报错