Валидатор JSON-схемы
Проверяйте JSON относительно JSON Schema (Draft 2020-12) и получайте ошибки с полным путём экземпляра
JSON
Схема
Валидатор JSON-схемы
Проверяйте JSON относительно JSON Schema (Draft 2020-12) и получайте ошибки с полным путём экземпляра
Возможности
- Проверяет JSON-экземпляры по любой JSON Schema через Ajv (де-факто эталонную реализацию), с полной поддержкой ключевых слов Draft-07, 2019-09 и 2020-12
- Отчёт об ошибках перечисляет каждый сбой как `путь: сообщение` — пути экземпляра следуют нотации RFC 6901 JSON Pointer, можно сразу спуститься к проблемному узлу во вложенных данных
- Все ошибки сообщаются за один проход (allErrors: true), а не на первой ошибке — увидите все проблемы сразу
- Компиляция в строгом режиме отключена, чтобы нестандартные или расширенные схемы всё равно компилировались; allowUnionTypes включён для схем с union-типами
- Кнопка «Загрузить пример» заполняет обе панели маленьким примером (объект с обязательными id и name плюс массив tags), чтобы увидеть валидатор без набора текста
- Кнопка «Копировать ошибки» выводит полный список как разделённый переводами строк блок `путь: сообщение` — вставляйте прямо в тикет или фикстуру теста
- Полностью на стороне клиента: Ajv работает в вашем браузере, JSON или схема не отправляются на сервер, и инструмент работает офлайн после загрузки страницы
- Отдельный отчёт об ошибке разбора отличает некорректный JSON от нарушений схемы — вы всегда знаете, что чинить: синтаксис или контракт
Как использовать
- Вставьте JSON-экземпляр для проверки в левое текстовое поле.
- Вставьте вашу JSON-схему в правое поле — используйте Draft 2020-12, 2019-09 или Draft-07; Ajv выбирает автоматически по $schema.
- Нажмите «Проверить». Если оба ввода разобраны чисто, Ajv компилирует схему и запускает валидацию.
- Прочтите результат: зелёный баннер «Валидно» означает совпадение; иначе каждая ошибка показывает путь JSON Pointer и читабельное сообщение Ajv.
- Нажмите «Копировать ошибки», чтобы получить полный отчёт как строки `путь: сообщение» для обмена или хранения в фикстуре.
- Используйте «Загрузить пример», чтобы заполнить обе панели рабочим примером, если хотите проверить поведение перед вставкой своих данных.
Советы и лучшие практики
- Всегда указывайте поле $schema в вашей схеме, чтобы Ajv выбрал правильную семантику черновика.
- Предпочитайте additionalProperties: false во время разработки, чтобы рано ловить опечатки в именах полей.
- Используйте $defs (или definitions в Draft-07) для общих подсхем — ссылки делают схемы DRY и обозримыми.
- Если валидация проходит локально, но падает в CI, проверьте, что в обеих средах используются одинаковые версия Ajv и черновики.
- Сохраняйте вывод «Копировать ошибки» в ваших тестовых фикстурах, чтобы регрессии всплывали как диффы нарушений схемы.
Вопросы и ответы
Какие черновики JSON Schema поддерживаются?
Draft-07, Draft 2019-09 и Draft 2020-12. Ajv выбирает мета-схему автоматически по полю $schema; если опущено, возвращается к семантике Draft-07. Более новый 2020-12 заменяет definitions на $defs и items на prefixItems/items — принимаются и старые, и новые ключевые слова.
Что значит путь в ошибке?
Ajv сообщает instancePath в нотации RFC 6901 JSON Pointer: «/users/0/email» означает «свойство email первого пользователя». Корень — пустая строка (в UI отображается как $). Это упрощает возврат к проблемному полю во вложенных данных.
Почему моя схема не компилируется?
Частые причины: неверный JSON (лишние запятые, одинарные кавычки, ключи без кавычек); $ref на несуществующее определение; или ключевое слово в строгом режиме, не распознаваемое Ajv. Панель ошибки разбора схемы показывает точную ошибку компиляции Ajv; строгий режим здесь уже выключен, так что большинство нестандартных схем компилируются.
Почему я получаю ошибку «unknown keyword» или «unknown format»?
Стандартные ключевые слова JSON Schema (type, required, properties и т. д.) встроены. Пользовательские имена форматов вроде «date-time», «uri», «email» по умолчанию не валидируются — Ajv считает их аннотациями, пока вы не загрузите ajv-formats. Если форматы нужно проверять, запускайте валидацию в шаге сборки с установленным ajv-formats.
Валидатор останавливается на первой ошибке?
Нет. Ajv настроен с allErrors: true, поэтому каждая ошибка сообщается. Для глубоко вложенных ошибок это может быть громоздко; если нужна только первая, передавайте JSON+схему в свой вызов ajv() с allErrors: false в сборке.
Работает ли это для очень больших JSON-документов?
Да, но правильный паттерн в коде — compile-once-validate-many. Этот инструмент перекомпилирует на каждом нажатии «Проверить», что нормально для dev-времени, но не для горячих путей в продакшене. Используемая Ajv-сборка — стандартный ESM-бандл; ожидайте времён компиляции в миллисекундах для типичных схем.
Отправляются ли мой JSON и схема куда-либо?
Нет. Оба текстовых поля остаются в вашем браузере; Ajv работает локально; мы не логируем, не храним и не телеметрируем содержимое. Можно проверить во вкладке «Сеть» DevTools — при нажатии «Проверить» сетевого вызова нет.
В чём разница со вкладкой схемы в JSON Formatter?
Вкладка схемы JSON Formatter использует тот же Ajv-сервис SchemaService для разовых проверок рядом с форматированием, JSONPath и древовидным видом. Этот отдельный валидатор даёт две большие панели для вставки, загрузчик примера, экспорт «Копировать ошибки» и одну выделенную URL для закладки или обмена — лучше, когда валидация — ваша единственная задача.