Генератор 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-массив, генератор рассматривает каждый элемент как отдельный пример и формирует схему, описывающую отдельный элемент, а не внешний массив. Включите параметр «рассматривать как контейнер-массив», если вам нужна структура самого внешнего массива.

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

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Шпаргалка по Markdown

Практический справочник Markdown с настоящим предпросмотром и готовыми для копирования примерами заголовков, списков, таблиц, кода, ссылок, изображений и синтаксиса GFM.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Шпаргалка по регулярным выражениям

Поисковый справочник регулярных выражений для JavaScript, PCRE2/PHP, Python re и .NET. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.

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