Проверка схемы, как обеспечить существование свойства на верхнем уровне на основе условия на нижнем уровне - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь написать схему для проверки файла yaml после анализа его в JSON.

Предположим, что это мой файл .yml с двумя свойствами верхнего уровня, автомобилями и гаражом.

машины необязательны, а гараж требуется.

Тем не менее, одно из подразделений гаража - автомобили. Если автомобили под гаражом определены, я хочу, чтобы схема обеспечивала определение автомобилей на верхнем уровне. В противном случае схема не будет действительной

cars:
  - BMW
  - Mercedes-Benz
  - Audi

garage:
  location: Miami
  cars:
    - BMW
    - Audi

Моя схема:

{
  properties: {
    cars: {
       type: 'array',
       items: {
          type: 'string'
       }
     },
    garage: {
      type: 'object',
      properties: {
          location: {
            type: 'string'
           },
          cars: {
            type: 'array'
         }
    },
 required: ['garage']
}}

Так что я попытался сделать if-else на верхнем уровне

{
  if: { properties: { garage: { cars: {type: 'array'}}}},
  then: {required:['cars']},
  properties: {
    cars: {
       type: 'array',
       items: {
          type: 'string'
       }
     },
    garage: {
      type: 'object',
      properties: {
          location: {
            type: 'string'
           },
          cars: {
            type: 'array'
         }
    },
 required: ['garage']
}}

Но похоже, что я делаю это неправильно или это не служит этой цели.

Также выполнение anyOf на верхнем уровне для соответствия подсхемам не работает для меня ..

Любая помощь?

1 Ответ

0 голосов
/ 25 апреля 2019

Значение if должно быть схемой JSON.Если вы берете значение if в качестве схемы JSON самостоятельно и проверяете результат проверки его применения к правильному расположению в вашем экземпляре JSON, это может помочь вам отладить проблему такого типа.

Inваш if блок, вам нужно поместить гнездо cars в properties, как вы это делали в своей основной схеме.

Возможно, вы также захотите сделать гараж и машины необходимыми в вашем if block.]

Однако нельзя определить, что вы хотите, чтобы значения из garage.cars были включены в ваш массив cars.

...