JSON Схема "oneOf" каждый? - PullRequest
1 голос
/ 10 июля 2020

Можно ли создать схему JSON, которая проверяет, что массив содержит как минимум 1 экземпляр трех неперекрывающихся типов. Простым примером является массив чисел любой длины, который содержит по крайней мере одну 1, одну 2 и одну 3.

Я не могу использовать allOf, потому что это подтвердит, что каждое число в массиве 1, 2 и 3 - число которых не может быть ?

Я не могу использовать anyOf, потому что тогда у меня может быть массив только с одним элементом ?

Я не могу используйте oneOf, потому что, опять же, у меня может быть массив с одним числом

(... также я не понимаю, должен ли я работать с ключом contains или внутри ключа items)

Я ищу способ сказать «по одному из каждого» * ​​1017 * из этих элементов. Возможно ли это со схемой 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] - ДОЛЖЕН проверить

1 Ответ

2 голосов
/ 10 июля 2020

Вы можете поместить contains внутри allOf:

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