Схема JSON Можно ли использовать if / then / else, которые ссылаются на внешнее свойство? - PullRequest
4 голосов
/ 27 мая 2019

Я хочу добавить условно обязательные на основе значения какого-либо другого свойства.'companyName' и 'companyAddress' следует указывать только в том случае, если значение isInexperienced равно false.

Схема

{
  "type": "object",
  "properties": {
    "previous_employment_section": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "companyAddress": {
            "type": "string"
          },
          "companyName": {
            "type": "string"
          }
        },
        "if": {
          "#/properties/isInexperienced": {
            "const": false
          }
        },
        "then": {
          "required": [
            "companyName",
            "companyAddress"
          ]
        }
      }
    },
    "isInexperienced": {
      "type": "boolean"
    }
  }
}

Данные

{
  "previous_employment_section": [],
  "isInexperienced": true
}

Ответы [ 2 ]

3 голосов
/ 28 мая 2019

Я не до конца понимаю смысл вашей исходной схемы, но как насчет этой?

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
        "previous_employment_section": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "companyAddress": {
                        "type": "string"
                    },
                    "companyName": {
                        "type": "string"
                    }
                }
            }
        },
        "isInexperienced": {
            "type": "boolean"
        }
    },
    "if": {
        "properties": {
            "isInexperienced": {
                "const": false
            }
        }
    },
    "then": {
        "properties": {
            "previous_employment_section": {
                "items": {
                    "required": [
                        "companyName",
                        "companyAddress"
                    ]
                },
                "minItems": 1
            }
        }
    }
}
1 голос
/ 03 июня 2019

Это невозможно. Нам нужно иметь «если» на более высоком уровне, «свойства» могут быть вложенными. Можно использовать метод Ледпони.

...