我正在使用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())