Валидатор 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 от нарушений схемы — вы всегда знаете, что чинить: синтаксис или контракт

Как использовать

  1. Вставьте JSON-экземпляр для проверки в левое текстовое поле.
  2. Вставьте вашу JSON-схему в правое поле — используйте Draft 2020-12, 2019-09 или Draft-07; Ajv выбирает автоматически по $schema.
  3. Нажмите «Проверить». Если оба ввода разобраны чисто, Ajv компилирует схему и запускает валидацию.
  4. Прочтите результат: зелёный баннер «Валидно» означает совпадение; иначе каждая ошибка показывает путь JSON Pointer и читабельное сообщение Ajv.
  5. Нажмите «Копировать ошибки», чтобы получить полный отчёт как строки `путь: сообщение» для обмена или хранения в фикстуре.
  6. Используйте «Загрузить пример», чтобы заполнить обе панели рабочим примером, если хотите проверить поведение перед вставкой своих данных.

Советы и лучшие практики

  • Всегда указывайте поле $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 для закладки или обмена — лучше, когда валидация — ваша единственная задача.