我对排他最小属性的实现正确吗?

2024-06-12 23:14:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: fromrefjsontrue表单schematyperequired
1条回答
网友
1楼 · 发布于 2024-06-12 23:14:24

你的模式有一些问题。 首先,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”只是零以上的简写。你可以随便叫它。)

相关问题 更多 >