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)

参考文档:

常用正则表达式

类型

字符串

正则

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+$

email

WP0ZZZY1ZGSA99962@porsche.ag

^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

mbbUid

nEkkNL7uTvlCEU4ZzN7DJWr06g91

^[A-Za-z0-9]+$