schema-校验json神器
Json schema简介
JSON Schema是基于JSON格式,用于定义JSON数据结构以及校验JSON数据内容。JSON Schema官网地址:http://json-schema.org/
要想完全理解的JSON Schema,我们首先需要了解JSON Schema中关键字的含义和作用。JSON Schema中比较常见的关键字如下:
关键字 | 描述 |
---|---|
$schema | 表示该JSON Schema文件遵循的规范 |
title | 为该JSON Schema文件提供一个标题 |
description | 关于该JSON Schema文件的描述信息 |
type | 表示待校验元素的类型(例如,最外层的type表示待校验的是一个JSON对象,内层type分别表示待校验的元素类型为,整数,字符串,数字) |
properties | 定义待校验的JSON对象中,各个key-value对中value的限制条件 |
requiredv | 定义待校验的JSON对象中,必须存在的key |
minimum | 用于约束取值范围,表示取值范围应该大于或等于minimum |
exclusiveMinimum | 如果minimum和exclusiveMinimum同时存在,且exclusiveMinimum的值为true,则表示取值范围只能大于minimum |
maximum | 用于约束取值范围,表示取值范围应该小于或等于maximum |
exclusiveMaximum | 如果maximum和exclusiveMaximum同时存在,且exclusiveMaximum的值为true,则表示取值范围只能小于maximum |
multipleOf | 用于约束取值,表示取值必须能够被multipleOf所指定的值整除 |
maxLength | 字符串类型数据的最大长度 |
minLength | 字符串类型数据的最小长度 |
pattern | 使用正则表达式约束字符串类型数据 |
type常见取值
当type取值为string类型的时候,是否还可以添加其他一些附加限制条件呢?我们接下来会按照type的不同取值一点点分析涉及到的关键字含义及用法。首先,我们来看一下,type常见的取值。具体如下:
type取值 | 对应的python数据类型 |
---|---|
object | Object |
array | List |
integer | int |
number | float或int |
null | None |
boolean | .Boolean |
string | String |
在上表中,我们采用了和Java数据类型对比分析的形式给出了type的常见取值,接下来,我们会分析当type为不同取值时,可能涉及的关键字含义和用法。
正则表达式
pattern
可以对字符串应满足的Pattern做规范,Pattern通过正则表达式描述。
{
"type" : "string",
"pattern" : "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$",
}
简单示例
from jsonschema import validate
result = {
"code" : "0",
"message": "OK",
"data" : [{
"channelDescription": "1212222222222",
"creator": "jun.chen",
"score": 9.8,
"createTime": "2021-02-07T15:03:56.000+0000",
"email": "jun.chen@mhp.com",
"is_right": True,
}]
}
schema = {
"type":"object",
"properties":{
"code":{"type":"string"},
"message":{"type":"string"},
"data":{
"type":"array",
"items": [{
"type":"object",
"properties":{
"channelDescription":{"type":"string","pattern":"^[0-9]+$"},
"creator":{"type":"string","maxLength":20},
"score":{"type":"number","maxLength":5},
"createTime":{"type":"string","format":"date-time"},
"email":{"type":"string","format":"email"},
"is_right": {"type":"boolean"},
}
}]
},
},
"required":["data","code","message"]
}
validate(instance=result,schema=schema)
参考文档:https://www.cnblogs.com/ChangAn223/p/11234348.html
常用正则表达式
类型 | 字符串 | 正则 |
---|---|---|
token | 8dd42b5f-9d4b-499a-991c-0d0e7dfdb3af | ^[a-z0-9\-]{36}$ |
id | e70deb5b81af8e04bc1026ecb2a1f9bf | ^[a-z0-9]{32}$ |
clientId | SMM18900 | ^[A-Z0-9]+$ |
jwt-token | eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50TGlzdCI6W3siYWNjb......Hkdj5BeAiDsh1g== | ^(?=.?[a-z])(?=.?[A-Z])(?=.?\d)(?=.?[#@&.]).$ |
serviceTel | 021-50275255 | 0\d{2,3}-[1-9]\d |
chargingPrice | 7.0 | ^[0-9]\d*\.\d+$ |
WP0ZZZY1ZGSA99962@porsche.ag | ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$ | |
mbbUid | nEkkNL7uTvlCEU4ZzN7DJWr06g91 | ^[A-Za-z0-9]+$ |