Генератор JSON Schema
Автоматическое создание соответствующих стандартам определений JSON Schema из данных JSON
// JSON Schema будет сгенерирован автоматическиЧто такое JSON Schema?
JSON Schema — это спецификация для описания и проверки структур данных JSON. Она определяет правила для структуры, типов данных, ограничений и широко используется для валидации API, валидации форм, проверки конфигурационных файлов.
С JSON Schema вы можете:
- Валидация данных: Проверять соответствие JSON данных ожидаемому формату и ограничениям
- Генерация документации: Автоматически создавать документацию API и определения типов
- Интеллект кода: Получать умное дополнение и проверку типов в IDE
- Автоматические тесты: Автоматически проверять формат данных ответа в тестах
Этот инструмент поддерживает спецификацию JSON Schema Draft-07, интеллектуально выводя вложенные объекты, типы массивов, перечисления и другие сложные структуры.
Как использовать
Как использовать
- Вставьте JSON-данные в левое поле ввода или нажмите Sample, чтобы загрузить пример
- Настройте параметры: задайте ID схемы, выберите, обязательны ли все поля, добавьте значения по умолчанию и т. д.
- Определение JSON Schema генерируется автоматически справа
- Нажмите Copy, чтобы скопировать сгенерированную схему в буфер обмена
- Используйте схему для проверки API, валидации форм или верификации конфигурационных файлов
Советы по схемам
- Сгенерированные схемы строятся на основе вашего примера JSON. Добавьте в него необязательные поля, значения null, массивы и крайние случаи, прежде чем копировать результат.
- Проверьте обязательные поля и форматы чисел/строк вручную — вывод по примеру не учитывает ваши бизнес-правила.
Применение
Технический принцип
JSON Schema — это декларативный словарь для аннотирования и валидации JSON-документов, определённый в нескольких черновиках IETF (Draft 4 / 6 / 7 / 2019-09 / 2020-12). Последний — Draft 2020-12, который определяет семь примитивных типов (string, number, integer, boolean, array, object, null), открытый словарь форматов (email, uri, date-time, uuid, ipv4, hostname, ...) и десятки ключевых слов ограничений: pattern (регулярное выражение), minimum/maximum/exclusiveMinimum/exclusiveMaximum (числовой диапазон), minLength/maxLength (длина строки), minItems/maxItems/uniqueItems (ограничения массива), required (массив обязательных свойств на уровне объекта), additionalProperties (допускаются ли дополнительные поля), enum и const (допустимые значения) и $ref (переиспользование подсхемы). Страница по умолчанию генерирует вывод Draft 2020-12, а более старый Draft-07 (всё ещё наиболее распространённый в продакшен-схемах) доступен через выпадающий список. Вывод генератора — это один проход по пользовательскому JSON с рекурсивным построением объекта схемы. Ядро вывода — это отображение: целое число (Number.isInteger и нет дробной части) -> {type: 'integer'}, дробное -> {type: 'number'}, строка -> {type: 'string'}, булево -> {type: 'boolean'}, массив -> {type: 'array', items: <рекурсия по первому элементу>} или {type: 'array', prefixItems: [...]} для кортежей в Draft 2020-12, объект -> {type: 'object', properties: <рекурсия по каждому ключу>}, null -> {type: 'null'}. Для массивов со смешанными типами элементов генератор выдаёт oneOf-подсхему, покрывающую каждый наблюдаемый тип. Для нескольких образцовых объектов генератор сравнивает их для составления списка required: ключ обязателен, если присутствует в каждом образце, и необязателен, если хотя бы один образец его опускает. Паттерны и ограничения выводятся, когда образцы кластеризуются: если все числа в поле попадают в диапазон [1, 100], генератор выдаёт {type: 'integer', minimum: 1, maximum: 100}; если строковое поле всегда является UUID, генератор помечает его format: 'uuid' и выдаёт регулярное выражение pattern: '^[0-9a-f]{8}-...'. Эвристика enum срабатывает, когда строковое поле принимает не более 10 различных значений в образцах (например, role: 'admin' | 'editor' | 'viewer' все наблюдаемые), и в этом случае генератор выдаёт массив enum. Глубоко вложенные объекты и рекурсивные структуры извлекаются в секцию $defs (Draft 2020-12; старое $definitions — ключевое слово Draft-07) и ссылаются через $ref. Рекурсивные структуры — например, узел дерева с полем 'children' типа узел дерева — получают заглушку $ref, указывающую на запись $defs родителя, которую валидатор разрешает в момент проверки. Генератор автоматически выбирает правильный баланс между ref и inline: простые схемы остаются inline, глубокие разбиваются на definitions для читаемости. Сгенерированные схемы детерминированы для данного ввода: одни и те же JSON-образцы всегда дают одну и ту же схему, а генератор реализован на чистом JavaScript без удалённых вызовов.
- Правила вывода типов: целые числа -> integer, дробные -> number, строки -> string, булевы -> boolean, массивы -> array + items, объекты -> object + properties. JSON null -> type: null (Draft 6+) или строка type: 'null'.
- Определение обязательных полей: при сравнении всех образцовых объектов поля, присутствующие в каждом объекте, считаются обязательными и добавляются в массив required; отсутствующие — необязательные. Ввод с одним образцом оставляет required: [], так как эвристика требует не менее двух образцов.
- Эвристика вывода enum: когда поле принимает небольшое конечное множество различных строковых значений в образцах (мощность <= 10), оно автоматически распознаётся как ограничение enum. Бо́льшие мощности остаются как обычный строковый тип.
- Автоопределение формата: на основе сигнатур строк поля помечаются подсказками формата вроде email, uri, date-time, uuid для документации и валидации. Ключевое слово format информативно в Draft 2020-12 — валидаторы могут выбирать, применять его или игнорировать.
- Извлечение вложенных $ref: глубоко вложенные объекты извлекаются во внутренние $defs (ключевое слово Draft 2020-12; старое $definitions — из Draft 7) и ссылаются через $ref, чтобы Schema не становилась слишком многословной. Рекурсивные структуры получают заглушку $ref, указывающую на запись $defs родителя.
- Расширение ограничений: помимо базовых типов, можно добавить minimum/maximum (числовой диапазон), minLength/maxLength (длина строки), pattern (регулярное выражение) и аналогичные ограничения. Генератор выдаёт их, когда входные образцы кластеризуются на определённых значениях.
- Выбор черновика: 2020-12 (последний) — по умолчанию и использует $defs; 2019-09 также использует $defs; Draft-07 использует $definitions и является тем, что большинство существующих инструментов всё ещё генерирует. Draft 6 ввёл строгую семантику required, где обязательные поля перечисляются в массиве required родителя, а не как sibling-свойство.
- Ключевые слова композиции (Draft 2019-09+): allOf (должно соответствовать всем подсхемам), anyOf (минимум одной), oneOf (ровно одной), not (не должно соответствовать). Генератор выбирает oneOf, когда значения образцов подходят к двум непересекающимся подсхемам (например, integer vs string).
Примеры
Простой объект -> Schema
{"name": "Alice", "age": 25}
->
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "age"]
}Schema с массивом
{"tags": ["js", "ts"]}
->
{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" }
}
}
}Schema с enum
{"role": "admin"}
->
{
"type": "object",
"properties": {
"role": { "type": "string", "enum": ["admin", "user", "guest"] }
}
}Часто задаваемые вопросы
Что такое JSON Schema?
JSON Schema (актуальная редакция — draft 2020-12) — это словарь для валидации JSON-документов. Он описывает ожидаемую форму документа: какие поля существуют, их типы, диапазоны и шаблоны — подобно XML Schema или TypeScript-типам. Инструменты вроде Ajv, Hyperjump и большинство API-фреймворков используют его для валидации в рантайме.
Какую редакцию JSON Schema выдаёт генератор?
Современные редакции (обычно 2020-12 или draft-07). Вывод начинается с $schema, объявляющего версию, $id (где применимо), type и подходящие ключевые слова для объектов, массивов, строк, чисел, булевых значений и null. Переключите параметр редакции, если ваш валидатор требует конкретной более старой версии.
Как он выводит типы из примера JSON?
Он обходит образец, фиксируя тип каждого свойства. Для массивов выводит схему items по одному или нескольким элементам (беря объединение, если элементы различаются). Для свойств со смешанными типами использует oneOf или anyOf. Результат — допустимая стартовая схема; ужесточайте ограничения (required, minLength, pattern) вручную.
Все ли свойства помечены как обязательные?
Настраивается. По умолчанию каждое наблюдаемое свойство помечается как обязательное. Включите «все необязательные», если ваш образец — лишь один пример, а другие экземпляры могут законно опускать поля. Массив required можно отредактировать после генерации.
Как обрабатываются вложенные объекты и массивы?
Вложенные объекты становятся вложенными блоками properties; массивы — определениями items. Глубокая вложенность работает нормально. Если одна и та же форма встречается многократно, можно отрефакторить через $defs / $ref постфактум — генератор не выполняет автодедупликацию.
Что он не может вывести из образцов?
Ограничения формата (date-time, email, uuid), принадлежность к enum, regex-шаблоны, minimum/maximum, minItems/maxItems и зависимости нужно добавлять вручную, потому что один образец их не показывает. Используйте сгенерированную схему как скелет, а затем ужесточайте её.
Загружается ли мой JSON?
Нет. Вывод типов выполняется локально. Вставленный JSON не покидает ваш браузер.