SchemaError True is not of type 'number'
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报错
说exclusiveMinimum只支持number类型的值难道我写法错误了?
不对啊!明明yapi里面number类型且area值大于0就是这种写法 ,如下:
检查好一会才发现原来是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:该关键字声明该模式是根据标准的特定草案编写的,主要用于版本控制,可省略。