Валидационные ошибки, которые формирует Ajv, представляют собой структурированные объекты, содержащие информацию о том, какое правило JSON Schema было нарушено, где именно это произошло и какие данные стали причиной несоответствия. Каждая ошибка соответствует одному нарушению конкретного ограничения схемы.
Типичная структура объекта ошибки включает следующие ключевые поля:
Каждое поле выполняет строго определённую роль и позволяет точно локализовать проблему в проверяемых данных.
Поле instancePath содержит JSON Pointer-путь к элементу данных, который не прошёл проверку.
Пример:
instancePath: "/user/address/zip"
Это означает, что ошибка возникла в поле zip,
находящемся внутри address, который, в свою очередь,
принадлежит объекту user.
Особенности:
Поле schemaPath указывает на конкретное правило JSON Schema, которое было нарушено.
Пример:
schemaPath: "#/properties/user/properties/age/minimum"
Значение показывает, что ошибка связана с ограничением
minimum для свойства age.
Функциональная роль:
Поле keyword указывает, какое именно правило JSON Schema вызвало ошибку.
Наиболее часто встречающиеся значения:
type — несоответствие типа данныхrequired — отсутствует обязательное полеminimum / maximum — нарушение числовых
ограниченийminLength / maxLength — нарушение
ограничений строкиpattern — несоответствие регулярному выражениюadditionalProperties — наличие лишних свойствenum — значение не входит в допустимый наборЭто поле определяет семантику ошибки и позволяет группировать ошибки по типу нарушения.
Поле params содержит дополнительные данные, специфичные для конкретного keyword.
Примеры:
Для minimum:
params: { limit: 18 }
Для required:
params: { missingProperty: "email" }
Для type:
params: { type: "string" }
Назначение поля:
Поле message содержит человекочитаемое описание ошибки, сформированное Ajv.
Примеры:
"must be >= 18""must have required property 'email'""must be string"Особенности:
Поле schema содержит значение схемы, которое участвовало в проверке.
Пример:
schema: 18
или
schema: { type: "string" }
Назначение:
Поле parentSchema содержит объект родительской схемы, в которой определено нарушенное правило.
Это позволяет:
allOf,
anyOf, oneOfAjv возвращает ошибки в виде массива объектов, где каждая ошибка независима:
errors: [
{
instancePath: "/age",
schemaPath: "#/properties/age/minimum",
keyword: "minimum",
params: { limit: 18 },
message: "must be >= 18"
},
{
instancePath: "/email",
schemaPath: "#/required",
keyword: "required",
params: { missingProperty: "email" },
message: "must have required property 'email'"
}
]
Каждый элемент массива описывает одно нарушение, даже если оно является частью более сложной валидации.
При работе Ajv учитывает ряд внутренних правил формирования объектов ошибок:
allErrors: true возвращаются все
найденные нарушения, а не только первоеstrict режима добавляются
дополнительные диагностические данныеif/then/else) ошибки
могут агрегироваться из нескольких веток схемыВложенные объекты формируют составные пути:
instancePath: "/user/profile/contacts/0/email"
Это означает:
userprofilecontactsemailТакая структура позволяет точно локализовать проблему даже в глубоко вложенных данных.
При использовании конструкций:
anyOfoneOfallOfобъекты ошибок могут содержать:
Особенно это заметно в случаях, когда данные частично удовлетворяют нескольким веткам схемы, но не проходят ни одну полностью.
Разные keyword формируют разные структуры params:
additionalProperties
params: { additionalProperty: "extraField" }
pattern
params: { pattern: "^[a-z]+$" }
format
params: { format: "email" }
Это позволяет программно обрабатывать ошибки без анализа текстового сообщения.
Поле message часто рассматривается как вспомогательное, поскольку:
Поэтому основная логика обработки ошибок строится на keyword и params, а message используется для отображения.
Несмотря на различия конфигураций, базовая структура ошибок Ajv остаётся стабильной:
Эта стабильность позволяет использовать ошибки Ajv как основу для построения систем валидации, логирования и трансформации данных без привязки к текстовым сообщениям.