Генератор JSON-схем

Вставьте один или несколько примеров JSON, и генератор выведет JSON-схему, которую можно использовать для проверки новых полезных нагрузок. Он определяет типы, помечает поля как обязательные, если они встречаются во всех примерах, выводит перечисления (enum), когда значения берутся из небольшого закрытого набора, и формирует результат, соответствующий JSON-схеме draft 2020-12.

Как сгенерировать JSON-схему

  1. 1

    Вставьте примеры документов

    Одна или несколько реальных полезных нагрузок: чем больше разнообразия, тем точнее выведенная схема.

  2. 2

    Выберите черновик

    draft 2020-12 (актуальный), draft 07 (широко поддерживаемый) или draft 04 (для устаревшего OpenAPI).

  3. 3

    Настройте вывод

    Переключение вывода enum, стратегия обязательных полей (пересечение или объединение) и нужно ли помечать все поля как `required`, когда передан только один пример.

  4. 4

    Сгенерируйте

    Схема выводится с `$schema`, `title`, `type`, `properties`, а для повторяющихся вложенных объектов формируются вложенные `$ref`.

Что вывод делает хорошо

  • Типы: string, number, integer, boolean, null, array, object.
  • Допустимость null: поле, которое в одном примере равно null, а в другом является строкой, становится ["string", "null"].
  • Элементы массива: однородные массивы дают единую схему items; неоднородные массивы дают prefixItems.
  • Перечисления (enum): если все наблюдаемые значения принадлежат небольшому набору (настраивается, по умолчанию 10 различных значений), выводится enum.
  • Обязательность: при нескольких примерах пересечение ключей становится required; при одном примере все ключи обязательны, если вы не откажетесь от этого.
  • Форматы: строки, соответствующие датам ISO-8601, адресам электронной почты или URI, получают выведенный format.

Чего вывод не может знать

  • Намерение и пример: пример age: 25 даёт вывод type: integer, но не может знать, что вы также принимаете null. Передавайте несколько примеров, охватывающих крайние случаи.
  • Ограничения: minLength, maximum, pattern, их нужно добавлять вручную. Вывод не угадывает пределы по примерам.
  • Бизнес-логика: условие «должно быть задано ровно одно из этих трёх полей» требует oneOf, вывести его нельзя.
  • Ссылки: генератор выдаёт плоскую схему. Если вы хотите вынести повторяющиеся структуры в $defs, сделайте это после генерации.

Пример вывода

Из одного примера:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

Выведенная схема (draft 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

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

  • Вывод по одному примеру. Схема будет переобучена, каждое поле становится обязательным, нет допуска null. Всегда подавайте не менее 5–10 разнообразных примеров.
  • Использование integer, когда вы имели в виду number. Если хотя бы в одном примере есть дробное число, выведенный тип становится number; если все целые, integer. Для полей, которые могут быть и тем и другим, включите пример с дробным числом.
  • Забытые необязательные поля. Поле, присутствующее в 4 из 5 примеров, но отсутствующее в 1, становится необязательным, так и задумано. Если все 5 примеров случайно его содержат, схема пометит его как обязательное, хотя на деле в вашем API оно необязательное.

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

Чем больше, тем лучше, но обычно 5–10 разнообразных примеров дают приемлемую схему. При одном примере каждое поле становится обязательным, а допустимость null вывести нельзя, по возможности всегда предоставляйте несколько вариантов.

По умолчанию draft 2020-12. Черновики 07 и 04 доступны для совместимости с OpenAPI 3.0 (который использует подмножество draft 05/07).

Нет. Вывод осмысленных ограничений по примерам привёл бы к переобучению схемы. Добавляйте minLength, maximum, pattern и т. д. вручную после генерации, исходя из ваших бизнес-правил.

Да. Если вы вставите JSON-массив, генератор рассматривает каждый элемент как отдельный пример и формирует схему, описывающую отдельный элемент, а не внешний массив. Включите параметр «рассматривать как контейнер-массив», если вам нужна структура самого внешнего массива.

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

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

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

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

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

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

Создайте webpack.config.js для webpack 5 по короткой форме: задайте entry, папку вывода и режим, затем включите TypeScript, Babel, загрузчик CSS, HtmlWebpackPlugin и сервер разработки.

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

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

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

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

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

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

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