python - 无法在 jsonschema 中使用日期验证

标签 python validation python-3.x jsonschema

我无法在 jsonschema 中使用“日期”进行类型验证

myschema = {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "self": {
        "primary_key": ["email"]
    },
    "properties": {
        "email": {
            "pattern": "[^@]+@[^@]+\.[^@]+"
        },
        "dob": {
            "description": "Date of Birth YYYY-MM-DD",
            "type": "date"
        }
    }
}

当我使用上面的模式执行下面的代码时

from jsonschema import validate
validate({ "dob": "2001-02-30"}, myschema)

得到如下错误轨迹

Unhandled Exception: 'date' is not valid under any of the given schemas

Failed validating 'anyOf' in schema['properties']['properties']['additionalProperties']['properties']['type']:
    {'anyOf': [{'$ref': '#/definitions/simpleTypes'},
               {'items': {'$ref': '#/definitions/simpleTypes'},
                'minItems': 1,
                'type': 'array',
                'uniqueItems': True}]}

On instance['properties']['dob']['type']:
    'date'

更新:日期似乎是一种格式而不是类型,但它仍然让我输入无效日期。我可以在 jsonschema 代码中清楚地看到它尝试使用 datetime 来解析它,但我无法在那里设置断点。

最佳答案

date 应该用作 "format" ,而不是“类型”:

"dob": {
    "description": "Date of Birth YYYY-MM-DD",
    "type": "string", 
    "format": "date"
}

然后,要检查格式,请使用:

from jsonschema import validate, FormatChecker

validate({"dob": "2001-02-30"}, myschema, format_checker=FormatChecker()) 

关于python - 无法在 jsonschema 中使用日期验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846886/

相关文章:

python - 一个接一个地获取标签?

jquery - 如何在按钮单击事件上调用验证,该事件不是提交类型而是按钮类型并且没有表单?

java - 纯Java验证框架

python - 干净地退出 python3 函数而不离开 repl

python - 在 PyTorch 中使用焦点损失处理不平衡数据集

Python - 从函数内部删除(从内存中删除)变量?

python - django 迁移中的顺序

php - 如何在 php 中完成验证?

Python-如何测试用户输入是否是十进制数

Python heapify() 时间复杂度