SchemaError True is not of type 'number'

python 3.8.7
Django 3.2.5
Python JsonSchema包版本 3.2.0
接口测试平台yapi 1.9.2

错误

在使用django接收前端json格式传过来的参数时需要验证各个参数的范围和类型,我使用了jsonschema这一个工具
在我写schema的时候,需要限定一个area 类型为number类型且area值大于0

{
    "type": "object",
    "required": [
        "title",
    ],
    "properties": {
        "area": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": True
        },
    }
}

在使用YAPI测试接口的时候发现Django报错

Django报错

说exclusiveMinimum只支持number类型的值难道我写法错误了?
不对啊!明明yapi里面number类型且area值大于0就是这种写法 ,如下:

YAPI页面

检查好一会才发现原来是jsonscheme的版本问题 , 增加"$schema": "http://json-schema.org/draft-04/schema",指定使用的版本就好了,

{
    "$schema": "http://json-schema.org/draft-04/schema",
    "type": "object",
    "required": [
        "title",
    ],
    "properties": {
        "area": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": True
        },
    }
}

总结

因为yapi 默认使用的是draft-04版本,而现在已经有最新的draft-07了,如果在python 中使用jsonschema而不指定版本则默认使用最新版本的,在最新版本中exclusiveMinimum的值只支持number类型的值。
主要是因为之前看到网上有教程说$schema可省略。为了简化schema就删掉了,现在加上schema版本后就没问题了

$schema:该关键字声明该模式是根据标准的特定草案编写的,主要用于版本控制,可省略
最后修改:2021 年 08 月 06 日 02 : 18 AM
如果觉得我的文章对你有用,请随意赞赏