Схема Json — требуемые поля на основе значения поля из одного и того же вложенного объекта

У меня есть запрос JSON, который я пытаюсь проверить по схеме JSON. Мне интересно, возможно ли потребовать, чтобы поле в подсхеме основывалось на значении поля в той же подсхеме? Я пробовал anyOf, OneOf и IF, Then, Else безрезультатно. anyOf возвращает ошибку «соответствует только 1 подсхема из 2», а OneOf возвращает «соответствуют 2 подсхемы вместо одной».

{
"field1":"aaa",
"field2":"bbb"
"field3":{ 
   "isTrue":true,
   "inner1":"1",
   "inner2":"1"
    }
}

Итак, для приведенного выше Json могу ли я требовать только поля inner1 и inner2, если поле isTrue истинно?

"field3": {
                                "type": "object",
                                "properties": {
                                    "isTrue": {
                                        "type": 
                                            "boolean"
                                    },
                                    "inner1": {
                                        "type": 
                                            "integer"
                                    },
                                    "inner2": {
                                        "type": 
                                            "string"
                                    }
                                },
                                "anyOf": [
                                    {
                                        "properties": {
                                            "isTrue": {
                                                "const": "true"
                                            }
                                        },
                                        "required": [
                                            "inner1",
                                            "inner2"
                                        ]
                                    },
                                    {
                                        "properties": {
                                            "isTrue": {
                                                "const": "false"
                                            }
                                        },
                                        "required": [
                                            "isTrue"
                                        ]
                                    }
                                ]

                            }

Выше приведена моя оскорбительная схема Json.


person kamm92    schedule 10.06.2020    source источник


Ответы (1)


Ваша схема должна работать, если вы удалите кавычки вокруг "true" и "false" — они обрабатываются как строки, а не логические значения.

(Кроме того, ваши данные используют строки как для inner1, так и для inner2, но схема требует, чтобы первая из них была целым числом — возможно, это была ошибка транскрипции.)

person Ether    schedule 10.06.2020