jsonschema的format关键字可以取多个值吗?

Att*_*cus 2 python 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())
Run Code Online (Sandbox Code Playgroud)

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

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

pyp*_*pae 5

尝试使用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())
Run Code Online (Sandbox Code Playgroud)