验证jsonschema日期格式
我正在尝试在Python中验证一个json对象的日期属性。
# Define JSON object
json_object = {
"date": "21ducn23-dsfsd-ds",
"age": 30
}
# Define JSON schema with date format
json_schema = {
"type": "object",
"properties": {
"date": {"type": "string", "format": "date"},
"age": {"type": "integer"},
},
"required": ["date", "age"],
}
}
# Validate JSON object against schema
jsonschema.validate(instance=json_object, schema=json_schema)
但是只要日期字段是一个字符串,验证就会成功通过。
我看过一些类似问题的回答,大家都说格式只是注释而已。看起来文档似乎有不同的说法,但我可能理解错了。
我该怎么做才能让这个工作正常,而不需要为日期属性定义一个正则表达式呢?
我使用的是jsonschema==4.21.1
和jsonschema-specifications==2023.12.1
1 个回答
1
根据你提供的文档内容:
默认情况下,格式只是一个标注,并不会影响验证。可选地,验证器的实现可以提供一个配置选项,让格式不仅仅是标注,而是作为一种断言来使用。
在Python中使用jsonschema
来实现这一点,你需要将一个格式检查对象
连接到验证器
里。
所以只需要在你的validate
调用中添加format_checker=jsonschema.FormatChecker()
:
from jsonschema import FormatChecker
jsonschema.validate(
instance=json_object, schema=json_schema, format_checker=FormatChecker()
)
这样就会抛出一个错误:
jsonschema.exceptions.ValidationError: '21ducn23-dsfsd-ds' is not a 'date'
Failed validating 'format' in schema['properties']['date']:
{'format': 'date', 'type': 'string'}
On instance['date']:
'21ducn23-dsfsd-ds'