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

Объекты

Объект — главный строительный блок большинства схем. Ключевые слова для объектов проверяют его свойства.

Свойства и обязательные поля

  • properties — схемы для свойств с известными именами. Свойства, не перечисленные в properties, по умолчанию разрешены.
  • required — список имён свойств, которые обязательно должны быть в объекте. Сама схема свойства в properties не делает его обязательным.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "email": { "type": "string", "format": "email" },
    "name": { "type": "string" },
    "age": { "type": "integer", "minimum": 0 }
  },
  "required": ["email"]
}
{ "email": "ivan@example.com", "age": 30 }
{ "name": "Иван" }

Дополнительные свойства

additionalProperties — схема для свойств, которые не описаны ни в properties, ни в patternProperties. Значение false запрещает любые лишние поля — так ловят опечатки в именах.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "city": { "type": "string" },
    "street": { "type": "string" }
  },
  "additionalProperties": false
}
{ "city": "Москва", "stret": "Тверская" }

Свойства по шаблону имени

patternProperties сопоставляет схемы с именами свойств по регулярному выражению. Пример: переводы названия, где ключ — код языка.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "patternProperties": {
    "^[a-z]{2}$": { "type": "string" }
  },
  "additionalProperties": false
}
{ "ru": "Кофемолка", "en": "Coffee grinder" }

Имена и количество свойств

  • propertyNames — схема, которой должно соответствовать каждое имя свойства (имена всегда строки).
  • minProperties, maxProperties — ограничения на число свойств.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "propertyNames": { "pattern": "^[a-z_]+$" },
  "minProperties": 1
}
{ "Camel": 1 }

Взаимозависимые свойства

dependentRequired говорит: если в объекте есть свойство A, то обязательны и свойства из списка. Например, если указан номер карты, нужны и срок действия, и имя владельца.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cardNumber": { "type": "string" },
    "expiry": { "type": "string" },
    "holder": { "type": "string" }
  },
  "dependentRequired": {
    "cardNumber": ["expiry", "holder"]
  }
}
{ "cardNumber": "4111111111111111" }

Неоценённые свойства

unevaluatedProperties похож на additionalProperties, но учитывает свойства, которые были проверены в любой вложенной схеме — в том числе внутри allOf, $ref или if/then. Это главный способ запретить лишние поля при комбинировании схем: additionalProperties «не видит» свойств, объявленных в соседних подсхемах.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "allOf": [
    { "type": "object", "properties": { "id": { "type": "integer" } }, "required": ["id"] }
  ],
  "properties": { "name": { "type": "string" } },
  "unevaluatedProperties": false
}
{ "id": 1, "name": "Иван" }
{ "id": 1, "name": "Иван", "extra": true }

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