Как выполнить проверку схемы JSON на объектах collection+json?

Я хотел бы проверить объекты collection+json со схемой, которые имеют разные форматы в одном и том же массиве. Например:

{
    "href": "https://example.com/whatnot",
    "data": [
        {
            "name": "foo",
            "value": "xyz:123:456"
        },
        {
            "name": "bar",
            "value": "8K"
        },
        {
            "name": "baz",
            "value": false
        }
    ]
}

Здесь значением является одно из точно шаблонного (\w+:\d+:\d+), одно из точно ([\w\d]+) и одно из точно булевых. Других вариантов нет.

Можно ли в схеме json проверить этот список на соответствие этим требованиям?

1 ответ

Решение

Я спал всю ночь и подумал, как сделать схему oneOf. Я пытался использовать его внутри "свойств", но оказалось, что это невозможно. Я думаю, что для идеального решения мне понадобится метод "явный". Но на данный момент этого достаточно.

{
    "type": "object",
    "required": [
        "name",
        "value"
    ],
    "oneOf": [
        {
            "properties":
            {
                "name":
                {
                    "type": "string",
                    "pattern": "foo"
                },
                "value":
                {
                    "type": "string",
                    "pattern": "^(\\w+:\\d+:\\d+)$"
                }
            }
        },
        {
            "properties":
            {
                "name":
                {
                    "type": "string",
                    "pattern": "bar"
                },
                "value":
                {
                    "type": "string",
                    "pattern": "^([\\w\\d]+)$"
                }
            }
        },
        {
            "properties":
            {
                "name":
                {
                    "type": "string",
                    "pattern": "baz"
                },
                "value":
                {
                    "type": "boolean"
                }
            }
        }
    ]
}
Другие вопросы по тегам