Документация / JSON Schema

Массивы

Массивы в JSON бывают двух видов: списки — однородные элементы произвольной длины, и кортежи — элементы фиксированной позиции, у каждой позиции свой смысл.

Списки

items — схема, которой должен соответствовать каждый элемент.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "array",
  "items": { "type": "number" }
}
[1, 2.5, 3]
[1, "два", 3]

Кортежи

prefixItems — список схем для первых элементов по позициям. items в таком случае относится к элементам после префикса; "items": false запрещает лишние элементы.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "Адрес: дом, улица, тип улицы",
  "type": "array",
  "prefixItems": [
    { "type": "integer" },
    { "type": "string" },
    { "enum": ["улица", "проспект", "переулок"] }
  ],
  "items": false
}
[10, "Тверская", "улица"]
[10, "Тверская", "улица", "Москва"]

До версии 2020-12 кортежи задавались массивом схем в items, а схема для остальных элементов — в additionalItems. Если ваша схема на draft-07, используйте эту запись.

Содержит элемент

contains требует, чтобы хотя бы один элемент соответствовал схеме; minContains и maxContains уточняют, сколько таких элементов должно быть.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "Среди ролей должна быть ровно одна роль owner",
  "type": "array",
  "items": { "type": "string" },
  "contains": { "const": "owner" },
  "minContains": 1,
  "maxContains": 1
}
["owner", "editor", "viewer"]
["editor", "viewer"]

Длина и уникальность

  • minItems, maxItems — число элементов.
  • uniqueItems: true — все элементы разные (сравнение по значению, в том числе для объектов).

Неоценённые элементы

unevaluatedItems — аналог unevaluatedProperties для массивов: схема для элементов, которые не проверила ни одна вложенная схема (prefixItems, items, contains в том числе внутри allOf и $ref).

Обновлено: 30 сентября 2026 г.