Схема json: можем ли мы использовать элементы внутри объекта

Ключевое слово «элементы», кажется, связано с «массивом» в большинстве примеров схемы json, которые я видел. Однако я попытался использовать его с объектом, используя этот полезный инструмент: http://www.jsonschemavalidator.net/ ( JSON Schema Draft 4), и это работает. Я не могу найти никаких документов, подтверждающих, что это законно, хотя мне кажется, что это правильно.

"value": { 
      "type": "object",
      "items": ...
}

Это действительно законно?


person philipper    schedule 06.06.2016    source источник


Ответы (1)


Вот документация, которую вы ищете.

Некоторые ключевые слова проверки применимы только к одному или нескольким примитивным типам. Когда примитивный тип экземпляра не может быть проверен по заданному ключевому слову, проверка этого ключевого слова и экземпляра ДОЛЖНА пройти успешно.

Чтобы проиллюстрировать концепцию, возьмем эту схему в качестве примера.

{
  "items": { "type": "string" },
  "maxLength": 2,
  "required": ["foo"]
}

["foo"] подтверждает

  • items -› пройти
  • maxLength -› игнорируется
  • required -› игнорируется

{ "foo": "bar" } подтверждает

  • items -› игнорируется
  • maxLength -› игнорируется
  • required -› пропуск

"foo" не проверяет

  • items -› игнорируется
  • maxLength -› провал
  • required -› игнорируется

3 подтверждает

  • items -› игнорируется
  • maxLength -› игнорируется
  • required -› игнорируется

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

{
  "anyOf": [
    {
      "type": "string",
      "maxLength": 2
    },
    {
      "type": "array",
      "items": { "type": "string" }
    },
    {
      "type": "object",
      "required": "foo"
    }
  ]
}
person Jason Desrosiers    schedule 06.06.2016