我的独占最小属性的实现是否正确?



我正在使用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
}

您的架构存在一些问题。 首先,exclusiveMinimum必须是布尔值,而不是字符串。 其次,required需要是对象级别,而不是属性级别,因为架构被指定为 draft-4 架构。如果可能的话,你应该使用Draft4Validator。

第三,$ref。这个关键字,一直到 draft-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"只是"大于零"的简写。你可以随心所欲地称呼它。

最新更新