验证jsonschema日期格式

1 投票
1 回答
32 浏览
提问于 2025-04-13 17:58

我正在尝试在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.1jsonschema-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'

撰写回答