Обязательные свойства переключения схемы JSON, если перечисление присутствует в другом свойстве массива - PullRequest
0 голосов
/ 18 февраля 2019

Я использую черновой вариант 4 схемы json, и мне нужно сделать некоторые свойства обязательными, но только если перечисление присутствует в другом свойстве: так что для аргумента, только если "option3" присутствует в моем массиве "entity", тогда"option_overwrite" и "option_list" обязательны для заполнения.

Допустимые записи могут быть:

entities: [option1, option2]

ИЛИ

entities: [option1, option3]
option_overwrite: true
option_list: [obj1, obj2]

Однако это не должно произойти:

entities: [option1, option3]

Возможно ли это с черновиком 4 или мне понадобятся операторы if, then else из черновика 6/7?

Моя нынешняя схема выглядит следующим образом, что, по-видимому, подтверждает со свойствами по умолчанию около 50%время:

{
"title": "Parameters",
"description": "run time parameters",
"type": "object",
"properties": {
    "entities": {
        "description": "Entities to import",
        "type": "array",
        "items": {
            "type": "string",
            "enum": [
                "option1",
                "option2",
                "option3"
            ]
        },
        "default": [
            "option1",
            "option2"
        ]
    },
    "option_list": {
        "description": "item list",
        "type": [
            "array",
            "null"
        ],
        "items": {
            "type": "string"
        }
    },
    "option_overwrite": {
        "description": "overwrite option",
        "type": "boolean"
    }
},
"anyOf": [
    {
        "not": {
            "$ref": "#/definitions/contains-option3"
        }
    },
    {
        "required": [
            "option_overwrite",
            "option_list"
        ]
    }
],
"definitions": {
    "contains-option3": {
        "properties": {
            "entities": {
                "not": {
                    "items": {
                        "not": {
                            "enum": [
                                "option3"
                            ]
                        }
                    }
                }
            }
        }
    }
}

}

Заранее спасибо.

...