jsonschema 语法,一篇就搞定

RESTFUL 接口里,经常需要检查 json 参数,几次老记不住,就查了下,写下以后备用。

以下是python jsonschema 的一个例子,包含了绝大多数常用检测,注释看完就明白了。

from jsonschema import validate, draft7_format_checker
from jsonschema.exceptions import SchemaError, ValidationError

schema = {
    # 该关键字用于指定JSON Schema版本: draft-07
    "$schema": "http://json-schema.org/draft-07/schema#",
    # 描述对应的JSON元素,title相对来说,更加简洁
    "title": "book info",
    # 描述对应的JSON元素,description更加倾向于详细描述相关信息
    "description": "some information about book",
    # 该关键字用于限定待校验JSON元素所属的数据类型,取值可为:object,array,integer,number,string,boolean,null
    "type": "object",
    # 用于指定JSON对象中的各种不同key应该满足的校验逻辑,
    # 如果待校验JSON对象中所有值都能够通过该关键字值中定义的对应key的校验逻辑,每个key对应的值,都是一个JSON Schema,则待校验JSON对象通过校验。
    "properties": {
        "id": {
            "description": "The unique identifier for a book",
            "type": "integer",
            "minimum": 1
        },
        "name": {
            "description": "book name",
            "type": "string",
            "minLength": 3,
            "maxLength": 30
        },
        "info": {
            "description": "simple information about book",
            "type": "string",
            "minLength": 10,
            "maxLength": 60
        },
        "tips": {
            "anyOf": [  # 满足其中一个类型 就行
                {"type": "string", "minLength": 10, "maxLength": 60}, 
                {"type": "number", "minimum": 5.0}
            ]
        },
        "price": {
            "description": "book price",
            "type": "number",
            # 能被0.5整除
            "multipleOf": 0.5,
            # 这里取等,5.0= ".join([i for i in e.path]), e.message))
except ValidationError as e:
    print("json数据不符合schema规定:\n出错字段:{}\n提示信息:{}".format(" --> ".join([i for i in e.path]), e.message))
else:
    print("验证成功!")

 

你可能感兴趣的:(jsonshema)