2013-04-25 1 views
31

Иногда я заметил следующее JSON Schemas:В чем разница между «требуется» против «факультативный» в JSON Schema

{ 
    "type": "object", 
    "properties": { 
     "address": { 
        "type": "string", 
        "required": true 
      } 
    } 

} 

против

{ 
    "type": "object", 
    "properties": { 
     "address": { 
        "type": "string", 
        "optional": false 
      } 
    } 

} 

Так что разница между required против optional в приведенном выше примере?

ответ

6

Это означает, что объект должен иметь значение undefined для объекта address (если required).

15

Фактически, они являются эквивалентными выражениями, но используют разные версии стандарта.

optional от v2, required от v3. Вы должны убедиться, что используете правильный инструмент (хотя в идеале вы должны перейти на v4, если сможете).

24

IETF draft v4 схемы JSON определяет только required и не включает optional.

Цитирую section на required из проекта v4:

Допустимые значения: Значение этого ключевого слова должен быть массивом. Этот массив ДОЛЖЕН иметь как минимум один элемент. Элементы этого массива ДОЛЖНЫ быть строками, и ДОЛЖНЫ быть уникальными.

Условия для успешной проверки: экземпляр объекта является действительным в отношении этого ключевого слова, если его набор свойств содержит все элементы значения массива этого ключевого слова.

В действительности, используя required делает необязательные все свойства, для которых имя не включены в данном массиве строк.

+0

Я не могу сказать, почему, но требуемый, кажется, пуст в ссылке. Ссылка правильная, хотя – erikbwork

+2

@ erikb85 В [link] (http://json-schema.org/latest/json-schema-validation.html#anchor61) «5.4.3. Required» - это только общий заголовок; в двух подразделах под ним подробно указано «требуемое» использование ключевых слов. –

+0

Ах, ладно, это было действительно непонятно, просто глядя на прихожую. Ваше форматирование стало более ясным в моих глазах. – erikbwork