【问题标题】:JSON Schema "oneOf" each?JSON模式“oneOf”每个?
【发布时间】:2020-07-10 13:28:00
【问题描述】:

是否可以创建一个 JSON Schema 来验证一个数组是否包含至少 1 个三个非重叠类型的实例。一个简单的例子是一个任意长度的数字数组,其中至少包含一个 1、一个 2 和一个 3。

我不能使用allOf,因为这将验证数组中的每个数字都是 1、2 和 3 - 没有数字可以是????

我不能使用anyOf,因为这样我就可以拥有一个只有一个元素的数组????

我不能使用oneOf,因为我也可以有一个只有一个数字的数组

(...我也不清楚我应该使用contains 键还是在items 键内)

我正在寻找一种方式来表达这些项目中的“每个”。 JSON Schema 可以吗?


这是一个带有oneOf的损坏示例

{
    "type": "object",
    "properties": {
        "numbers": {
            "type": "array",
            "contains": {
                "oneOf": [
                    {
                        "const": 1
                    },
                    {
                        "const": 2
                    },
                    {
                        "const": 3
                    }
                ]
            },
            "items": {
                "type": "number"
            }
        }
    }
}

[1] – 不应验证

[1,2] - 不应该验证

[1,2,3] - 应该验证

[1,2,3,4] - 应该验证

【问题讨论】:

    标签: javascript json jsonschema json-schema-validator


    【解决方案1】:

    您可以将contains 放在allOf 内:

    {
        "type": "object",
        "properties": {
            "numbers": {
                "type": "array",
                "allOf": [
                    {
                        "contains": {
                            "const": 1
                        }
                    },
                    {
                        "contains": {
                            "const": 2
                        }
                    },
                    {
                        "contains": {
                            "const": 3
                        }
                    }
                ]
            }
        }
    }``
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-02
      • 2017-04-26
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2020-01-30
      • 2016-10-17
      • 1970-01-01
      相关资源
      最近更新 更多