5

是否可以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"
            }
    }
}
4

1 回答 1

11

您可以使用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"]}
    ]
}

带有三个示例的在线演示:

于 2013-10-17T23:17:21.230 回答