我正在使用JsonSchema 2.6.0
来验证python程序的表单数据。
我正在尝试实现exclusiveMinimum
,但是当我发布到表单时,它接受0作为有效值,但不应接受。
from jsonschema import Draft3Validator
orderValidationSchema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"total_amount": {
"$ref": "#/definitions/floatRef",
"required": "true",
"exclusiveMinimum": 0
},
"payable_amount": {
"$ref": "#/definitions/floatRef",
"required": "true",
"exclusiveMinimum": 0
},
},
"definitions": {
"floatRef": {
"type": "number",
},
}
}
经历了几个git问题和其他链接后,我按照下面所示的方式进行了尝试,但仍然无法正常工作。
from jsonschema import Draft3Validator
orderValidationSchema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"total_amount": {
"$ref": "#/definitions/floatRef",
"required": "true",
"minimum": 0,
"exclusiveMinimum": "true"
},
"payable_amount": {
"$ref": "#/definitions/floatRef",
"required": "true",
"minimum": 0,
"exclusiveMinimum": "true"
},
},
"definitions": {
"floatRef": {
"type": "number",
},
}
}
如果我有任何错误,请告诉我。
我正在使用Draft3Validator
,以防万一有任何与之相关的活跃问题。
下面是传递给此架构的json。
{
"total_amount" : 100000,
"payable_amount" : 10000
}
答案 0 :(得分:1)
您的架构存在一些问题。
首先,exclusiveMinimum
必须是布尔值,而不是字符串。
其次,required
必须是对象级别,而不是属性级别,因为该模式被指定为草稿4模式。您应该尽可能使用Draft4Validator。
第三,$ref
。一直到草稿7为止的该关键字替换了整个对象的内容,这意味着该对象中的其他关键字将被忽略。
解决方案是将要应用于实例属性的两个模式包装在allOf
中。我已经通过以下模式演示了这一点,该模式似乎可以满足您的要求。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"total_amount": {
"$ref": "#/definitions/floatRefMTZ"
},
"payable_amount": {
"$ref": "#/definitions/floatRefMTZ"
}
},
"required": ["total_amount", "payable_amount"],
"definitions": {
"floatRef": {
"type": "number"
},
"floatRefMTZ": {
"allOf": [
{
"$ref": "#/definitions/floatRef"
},
{
"minimum": 0,
"exclusiveMinimum": true
}
]
}
}
}
(“ MTZ”只是“多于零”的简写。您可以随意命名。)