【问题标题】:Does JSON Schema allow for different types for the same element?JSON Schema 是否允许同一元素使用不同的类型?
【发布时间】:2023-03-19 14:26:02
【问题描述】:

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

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

{"name": "Tom", "pets": ["monkey", "fish"]}
{“名称”:“哈利”,“宠物”:“白鹭”}

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

【问题讨论】:

  • 您能否强制或迁移数据始终为数组,即使为空或一个元素?此外,根据您提供的链接,架构被声明为:{ "_id" : { "key" : "pets" }, "value" : { "types" : [ "String", "Array" ] },,以便涵盖这两种情况。

标签: json mongodb jsonschema


【解决方案1】:

当然。其实有两种方法:

#1) "type"中有多个条目

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

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

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

#2) 使用"oneOf"

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2021-02-10
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多