如何使json-schema允许一个而不是另一个字段?

时间:2013-10-17 20:26:36

标签: python json jsonschema

是否可以使jsonschema只有两个字段中的一个。

例如,如果我希望JSON使用以太start_dtend_dt但不能同时使用{ "name": "foo", "start_dt": "2012-10-10" } ,则可以使用图片。像这样:

确定

{
    "name": "foo",
    "end_dt": "2012-10-10"
} 

确定

{
    "name": "foo",
    "start_dt": "2012-10-10"
    "end_dt": "2013-11-11"
} 

不行

{ 
    "title": "Request Schema",
    "type": "object",
    "properties": {
        "name": 
            {   
                "type": "string"
            },  
        "start_dt": 
            {
                "type": "string",
                "format": "date"

            },
        "end_dt":
            {
                "type": "string",
                "format": "date"
            }
    }
}

我应该在架构中添加什么:

{{1}}

1 个答案:

答案 0 :(得分:9)

您可以使用oneOf表达此信息。这意味着数据必须与提供的子模式的恰好一个匹配,但不能超过一个。

将此与required相结合,此架构表明实例必须定义start_dt,或定义end_dt - 但如果它们包含两者,则它无效:

{
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "start_dt": {"type": "string", "format": "date"},
        "end_dt": {"type": "string", "format": "date"}
    },
    "oneOf": [
        {"required": ["start_dt"]},
        {"required": ["end_dt"]}
    ]
}

使用您的三个示例进行在线演示: