JSON Schema是否允许同一元素使用不同的类型?

时间:2013-11-28 15:22:56

标签: json mongodb jsonschema

我目前正在为MongoDB开发一个JSON模式提取器。

例如,我有以下JSON文档(取自https://github.com/variety/

{“name”:“Tom”,“pets”:[“monkey”,“fish”]}
{“name”:“Harry”,“pets”:“egret”}

如您所见,宠物可以是数组和字符串。是否有允许这两个文档的JSON模式?

1 个答案:

答案 0 :(得分:3)

绝对。事实上,为此有两种方式:

#1)"type"

中的多个条目

架构中的"type"关键字可以是数组:

{
    "type": ["string", "array"],
    "items": {
        "type": "string"
    }
}

这里,数据可以是字符串或数组。因为"items"关键字仅在数据是数组时使用,所以这表示数据可以是字符串或字符串数​​组。

#2)使用"oneOf"

以上适用于简单案例。但是,在“这可能是A或B”的一般情况下,您可以使用"oneOf"

{
    "oneOf": [
        {
            "type": "string"
        },
        {
            "type": "array",
            "items": {
                "type": "string"
            }
        }
    ]
}

这更详细 - 第一个选项很简单。但是,如果您的约束更复杂(例如“数据可以是布尔数组或数字数组”),则可以使用此选项。