Валидатор JSON Schema

Вставьте схему и документ, выберите draft, и валидатор проверит документ по каждому ключевому слову, которое использует ваша схема, type, required, enum, oneOf, $ref, if/then/else, пользовательский format, сообщая о каждом нарушении с указателем в стиле JSONPath на точное проблемное место.

Как валидировать по схеме

  1. 1

    Вставьте схему

    JSON Schema draft 04, 07 или 2020-12. Ключевое слово `$schema` (если есть) автоматически выбирает draft.

  2. 2

    Вставьте документ

    JSON, который вы хотите проверить. Сначала он должен быть валидным JSON: синтаксические ошибки показываются перед оценкой по схеме.

  3. 3

    Валидируйте

    О каждом нарушении сообщается с указателем JSON (`/user/email`) и неудавшимся ключевым словом (`format`, `required` и т. д.).

  4. 4

    Исправьте и перепроверьте

    Редактируйте любую сторону, и статус обновляется в реальном времени.

Поддерживаемые ключевые слова

Ядро: type, enum, const, multipleOf, maximum, minimum, exclusiveMaximum, exclusiveMinimum, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, maxContains, minContains, maxProperties, minProperties, required, dependentRequired.

Композиция: allOf, anyOf, oneOf, not.

Аппликаторы: properties, patternProperties, additionalProperties, items, prefixItems, contains, propertyNames.

Условные: if, then, else, dependentSchemas.

Ссылки: $ref, $defs, $id, $anchor.

Форматы (с валидацией при включении): date-time, date, time, duration, email, hostname, ipv4, ipv6, uri, uuid, regex.

Вывод ошибок

FAIL  /user/email        format            "not-an-email" is not a valid "email"
FAIL  /user/age          minimum           -3 is less than the minimum 0
FAIL  /orders/0/total    type              "42" is not of type "number"
FAIL  /                  required          missing required property "shippingAddress"

Каждая ошибка включает путь и неудавшееся ключевое слово, что позволяет быстро найти ее в вашем редакторе.

Различия draft, которые кусаются

Ключевое слово Draft 04 Draft 07 Draft 2020-12
id против $id id $id $id
exclusiveMaximum как bool Да Число Число
Массивный синтаксис items items items prefixItems
$ref допускает соседей Нет Нет Да

Задайте правильный draft; валидация схемы draft-04 как 2020-12 неверно истолкует id и некоторые другие тонкости.

Типичные рабочие процессы

  • Тестирование контракта API: перед деплоем прогоните сгенерированную/обновленную схему OpenAPI по реальным примерам ответов.
  • Усиление конфигурации: валидируйте каждый YAML/JSON-конфиг в CI по схеме перед слиянием.
  • Прием данных: отклоняйте полезные нагрузки, не соответствующие ожидаемой форме, заранее, с понятным сообщением об ошибке.

Частые ошибки

  • Забывание принудительной проверки format. По умолчанию большинство валидаторов трактуют неизвестные форматы как только аннотацию. Включите строгую проверку формата, чтобы действительно отклонять некорректные email и даты.
  • Чрезмерное использование oneOf. Если две ветви oneOf пересекаются, документ не пройдет (он должен совпадать ровно с одной). Используйте anyOf или паттерны дискриминатора.
  • Тесные схемы с additionalProperties: false. Добавление нового опционального поля становится ломающим изменением. Опускайте это, если только вам действительно не нужен закрытый объект.

Часто задаваемые вопросы

Да. Draft 2020-12, 07 и 04, все поддерживаются. Валидатор читает ключевое слово $schema из вашего документа, чтобы выбрать нужный, или откатывается на селектор в интерфейсе.

Стандартные форматы (email, date-time, uuid, ipv4 и т. д.) валидируются при включенной строгой проверке формата. Пользовательские форматы, объявленные в вашей схеме, трактуются как только аннотация, если вы не предоставите регулярное выражение через pattern.

Внутренние ссылки (#/$defs/foo) разрешаются автоматически. Внешние HTTP-ссылки по умолчанию не загружаются, из соображений безопасности. Сначала встройте свои внешние ссылки или используйте специализированный инструмент с поддержкой разрешения удаленных $ref.

Да. И схема, и документ остаются локальными. Вставленный контент никогда не загружается, безопасно для внутренних контрактов API и чувствительных данных.

Сопутствующие инструменты

Смешивание цветов

Смешайте два HEX-цвета в 2-20 равномерных образцов. Каждый промежуточный цвет показывается как HEX-код в верхнем регистре, включая оба края.

Генератор вымышленных телефонных номеров

Создавайте до 50 вымышленных номеров из официально зарезервированных диапазонов пяти стран.

Генератор конфигурации webpack

Создайте webpack.config.js для webpack 5 под чистый JavaScript, React или Vue: TypeScript, Babel, CSS или Sass, изображения, HtmlWebpackPlugin, dev-сервер и команда npm install.

Генератор бейджей README

Создавайте бейджи shields.io для файлов README на GitHub: статус сборки, версия, лицензия, число загрузок и покрытие кода. Просмотрите и скопируйте фрагмент Markdown.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.

Генератор случайных адресов

Создавайте 1–20 похожих на адрес записей для макетов и тестов в трёх упрощённых форматах.

Инструмент доступен на других языках