Генератор JSON Schema из JSON

Построение схемы JSON Schema по примеру JSON: типы, обязательные поля, форматы, версии draft-04, 07, 2019-09 и 2020-12.

Данные обрабатываются в браузере и никуда не отправляются

Версия
Обязательные поля
Лишние поля
Форматы
Примеры значений

Ввод

Перетащите файл сюда или выберите на диске

Результат

Здесь появится результат

Введите данные слева - результат появится сразу

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

Вставьте пример JSON - схема появляется сразу. Типы определяются по значениям (целое число отличается от дробного), поля объектов в массиве сливаются, а обязательными считаются поля, которые есть во всех объектах примера. Строки с датами, адресами почты, UUID и ссылками получают формат (format). Выберите версию схемы, а чтобы схема запрещала лишние поля, включите «Лишние поля: запрещены».

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

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

Вот что чаще всего упускают при создании схемы из примера:

Один пример - все поля обязательные

Если в примере один объект, схема считает все его поля обязательными. Добавьте в массив несколько записей, в том числе с пропущенными полями, - тогда обязательными останутся только общие.

Пустые массивы и null

Пустой массив ничего не говорит о типе элементов, а null - о типе значения. Инструмент предупреждает об этом: добавьте в пример заполненный массив и реальное значение.

Числа: целое или дробное

Значение 5 даёт integer, а 5.0 в JSON после разбора тоже целое. Если поле бывает дробным, вставьте в пример хотя бы одно дробное значение - тогда тип станет number.

Формат определяется по значениям

Формат (date, email, uuid, uri...) указывается, только если ему соответствуют все значения поля в примере. Одна строка «не по формату» - и формата в схеме не будет.

Схема не знает смысла полей

Инструмент не добавляет ограничения вроде minLength или enum и не пишет описания: их нужно дополнить вручную, например по документации API.

Лишние поля по умолчанию разрешены

JSON Schema по умолчанию принимает любые дополнительные поля. Чтобы схема их отвергала, включите запрет - в схему добавится additionalProperties: false.

Частые вопросы

Отправляются ли мои данные на сервер?

Нет - 100%. Сайт целиком статический, у него нет серверной части. Разбор и построение выполняются в вашем браузере, образцы данных никуда не передаются.

Какие версии JSON Schema поддерживаются?

draft-04, draft-07, 2019-09 и 2020-12: отличается идентификатор версии ($schema). Построенная схема использует ключевые слова, одинаково понятные всем версиям, поэтому проверяется любой из них. Проверить результат можно валидатором JSON Schema на этом сайте.

Чем схема из примера отличается от написанной вручную?

Схема из примера описывает форму конкретных данных, а не правила предметной области: она не знает допустимых диапазонов и перечислений. Это хорошая заготовка, которую затем уточняют.

Как работают обязательные поля?

Режим «Общие для всех» (по умолчанию) делает обязательными поля, которые есть в каждом объекте примера. «Все» - любое поле, встретившееся хотя бы раз. «Никакие» - ничего не требует.

Что даёт опция «Примеры значений»?

К простым полям добавляется ключевое слово examples с реальным значением из примера. Это удобно для документации, а валидацию не меняет (в draft-04 слово не используется и игнорируется).

Что делать, если типы в одном поле разные?

Если в массиве поле иногда строка, иногда число или null, схема получает список типов, например ["integer", "null"], и приходит предупреждение. Проверьте, что так и задумано.

Похожие инструменты

Курс «Проектирование API и интеграций»

Глубокое погружение в REST, gRPC, SOAP, проектирование баз данных и брокеры сообщений (Kafka, RabbitMQ). Делегирование рутины нейросетям (ИИ). Перестанете бояться технических собеседований и начнете говорить с разработчиками на одном языке. Курс собран так, чтобы пробить зарплатный потолок и вырасти в грейде - ученики тому подтверждение.

Перейти к курсу на Stepik