JSON 每个架构 "oneOf"?

JSON Schema "oneOf" each?

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

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

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

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

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

我正在寻找的是一种表达这些项目中的“其中一个” 的方式。 JSON 模式是否可行?


这是一个错误的例子 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] - 应该验证

您可以将 contains 放在 allOf 中:

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