Документация / 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 г.
