Инструмент Tool Kumar

Генератор JSON Schema

Создайте черновик JSON Schema по типичному JSON-документу. Результат описывает структуру примера и служит основой для валидации.

Как пользоваться инструментом

  1. Вставьте пример документа.
  2. В режиме «Конвертация» выберите JSON Schema.
  3. Проверьте выведенные свойства и сохраните схему.

Пример с разбором

Схема сгенерирована по объекту из примера, включая вложенные profile и tags. В этом единственном объекте есть все свойства, поэтому каждое из них помечено как обязательное.

Ввод

{"name":"Ada","age":36,"active":true,"tags":["json","tools"],"profile":{"city":"London"}}

Результат

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Root",
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "age": {
      "type": "integer"
    },
    "active": {
      "type": "boolean"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "profile": {
      "$ref": "#/$defs/Profile"
    }
  },
  "required": ["name", "age", "active", "tags", "profile"],
  "$defs": {
    "Profile": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": ["city"]
    }
  }
}

Как определяются обязательные свойства

Если сгенерировать схему по нескольким записям, в списке required останутся только ключи, которые есть у каждой записи. В этом примере у обоих пользователей есть id и email, а phone есть только у первого, поэтому свойство phone описано в схеме, но не является обязательным.

Input:
[{"id":1,"email":"ada@example.com","phone":"+44 20 7946 0000"},{"id":2,"email":"lin@example.com"}]

Generated schema:
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Root",
  "type": "array",
  "items": {
    "$ref": "#/$defs/RootItem"
  },
  "$defs": {
    "RootItem": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer"
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "phone": {
          "type": "string"
        }
      },
      "required": ["id", "email"]
    }
  }
}

Параметры и особые случаи

  • Вложенные объекты и массивы описываются рекурсивно.
  • Свойство попадает в список required, если оно есть у всех объектов в примерах для соответствующей части структуры. Поэтому один полный пример делает все обнаруженные свойства обязательными. В массиве объектов ключ, отсутствующий у части объектов, становится необязательным.
  • Если у части объектов значение свойства равно null, в тип свойства добавляется null. Само по себе это не делает свойство необязательным.
  • Результат служит основой для доработки. Проверьте список required, добавьте форматы, диапазоны и шаблоны и удалите всё, чего не гарантирует контракт вашего API.
  • Эта страница генерирует схему, но не проверяет документ на соответствие схеме. Перед генерацией проверьте синтаксис JSON в инструменте «JSON-валидатор».

Конфиденциальность по умолчанию

Документ остаётся в этом браузере. Tool Kumar разбирает и конвертирует данные, создаёт файлы для скачивания на вашем устройстве, без регистрации и отправки на сервер.

Вопросы об инструменте «Генератор JSON Schema»

Помечает ли генератор все свойства как обязательные?
Только те свойства, которые есть у каждого объекта в примерах. Один полный пример делает все его свойства обязательными, а ключ, отсутствующий у части объектов массива, становится необязательным. Перед публикацией схемы сверьте список required с контрактом вашего API.
Какую версию (draft) он использует?
В результате указана версия JSON Schema Draft 2020-12 и используются стандартные ключевые слова type и properties.
Выводит ли он структуру элементов массива?
Да. Для массивов объектов создаётся схема items на основе наблюдаемой структуры объекта.

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

JSON-валидатор, JSON в TypeScript и JSON в Zod.