jsonschema 的格式关键字可以采用多个值吗?



我正在使用jsonschema来验证JSON Blob,其中特定属性可以是日期或日期时间。因此,我希望format关键字允许多种潜在格式。

例如,以下代码有效:

import rfc3339_validator
schema = {
"title": "example",
"type": "object",
"required": ["example_property"],
"properties": {
"example_property": {
"type": "string",
"format": "date-time"
}
}
}
validate(instance, schema, format_checker=jsonschema.FormatChecker())

但理想情况下,我会将format与潜在格式列表一起使用,例如["date-time", "date"]

有没有办法做到这一点?我的临时解决方法是使用pattern关键字来确保属性至少包含日期。

尝试使用anyOf关键字,如:

import jsonschema
import rfc3339_validator
schema = {
"title": "example",
"type": "object",
"required": ["example_property"],
"properties": {
"example_property": {
"type": "string",
"anyOf": [
{
"format": "date-time"
},
{
"format": "date"
}
]
}
}
}
date_instance = {"example_property": "1970-01-01"}
date_time_instance = {"example_property": "2019-10-12T07:20:50.52Z"}
nonsense_instance = {"example_property": "nonsense"}
jsonschema.validate(date_instance, schema, format_checker=jsonschema.FormatChecker())
jsonschema.validate(date_time_instance, schema, format_checker=jsonschema.FormatChecker())
jsonschema.validate(nonsense_instance, schema, format_checker=jsonschema.FormatChecker())

最新更新