2015-07-05 6 views
0

В приведенной ниже модели свойство category_id должно быть необходимо, только если массив «detail» пуст.Подтвердить свойство против другого с помощью схемы JSON

Если массив «detail» не пуст, свойство «category_id» не требуется.

Как я могу это сделать с помощью схемы JSON?

{ 
    "description": "Expense model validation.", 
    "type": "object", 
    "properties": { 
     "description": { 
      "type": "string" 
     }, 
     "category_id": { 
      "type": "string" 
     }, 
     "detail": { 
      "type": "array", 
      "items": { 
       "description": "Expense detail", 
       "type": "object", 
       "properties": { 
        "description": { 
         "type": "string" 
        } 
       }, 
       "required": [ "description" ] 
      } 
     } 
    }, 
    "required": [ "description", "category_id" ] 
} 

ответ

1

Вы можете использовать anyOf, чтобы проверить, что либо category_id присутствует, или detail присутствует и имеет, по меньшей мере, один элемент.

{ 
    "description": "Expense model validation.", 
    "type": "object", 
    "properties": { 
    "description": { "type": "string" }, 
    "category_id": { "type": "string" }, 
    "detail": { 
     "type": "array", 
     "items": { 
     "description": "Expense detail", 
     "type": "object", 
     "properties": { 
      "description": { "type": "string" } 
     }, 
     "required": ["description"] 
     } 
    } 
    }, 
    "required": ["description"], 
    "anyOf": [ 
    { "required": ["category_id"] }, 
    { 
     "properties": { 
     "detail": { "minItems": 1 } 
     }, 
     "required": ["detail"] 
    } 
    ] 
} 
+0

Использование anyOf, проверка была успешной только в этом случае: { "Описание": "Расход", "деталь": [{ "Описание": "Расход детали" }] } но этот запрос должен быть действительным, но не было: { «описание»: «Расходы», «category_id»: «555cf4fa5a98e36338886ca6» } Однако я изменил использовать oneOf вместо anyOf и он работал отлично! Tks очень много! – Diogo

+0

@ Diogo, я не получаю таких же результатов, как вы. Оба примера, которые вы даете, правильно проверяют для меня. 'oneOf' должен работать, кроме случая, когда присутствуют' category_id' и 'detail'. 'oneOf' требует проверки только одной (не обеих) схем. Если размещенная вами схема не работает, может возникнуть проблема с используемым валидатором. – Jason

+0

Вы правы, anyOf отлично работает. Это была ошибка в моей тестовой полезной нагрузке. Ткс снова! – Diogo