Перейти к содержимому

Конвертировать JSON в схему JSON — Numio

Выводит JSON Schema (draft-07) по образцу JSON. Для массивов объектов все элементы объединяются: ключ, отсутствующий или равный null в некоторых элементах, не попадает в required.

Создание первой схемы валидации для ответа API или payload вебхука по собранным примерам.

JSON

JSON Schema

Когда пригодится

  • Создание первой схемы валидации для ответа API или payload вебхука по собранным примерам.
  • Получение схемы для Ajv, OpenAPI или следующего шага JSON Schema → TypeScript/Zod.

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

  1. Вставьте образец JSON в левый редактор или откройте файл в кодировке UTF-8 кнопкой загрузки файла. Массив из нескольких записей даёт более точные списки required.
  2. Изучите схему: в одиночном объекте все ключи обязательны (required), а ключи, отсутствующие или равные null в некоторых элементах массива, необязательны.
  3. Скопируйте схему и добавьте ограничения, которые образец показать не может: форматы, enum, integer и minimum.

Образец JSON

[
  { "id": 1, "name": "Ada", "email": null },
  { "id": 2, "name": "Lin", "email": "lin@example.com" }
]

JSON Schema (draft-07)

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Generated schema for Root",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "name": {
        "type": "string"
      },
      "email": {
        "type": "string"
      }
    },
    "required": [
      "id",
      "name"
    ]
  }
}

Подробности и ограничения

Числа всегда получают "type": "number"; integer, форматы (email, date-time), enum и pattern не выводятся. Заголовок всегда "Generated schema for Root".

Поле, равное null везде, получает пустую схему {}. null рядом с другими значениями считается признаком необязательности, а не типом null.

Массивы смешанных типов вроде [1, "x"] становятся кортежем (список items с additionalItems: false); пустой массив даёт items: {}.

Генерируется в браузере с помощью json_typegen, скомпилированного в WebAssembly. Для невалидного JSON (в том числе с висячими запятыми) показывается ошибка разбора JSON, а одиночное значение вроде 42 отклоняется, так как у него нет структуры.

FAQ

Какой драфт JSON Schema используется в выводе?

Draft-07, объявленный как "$schema": "http://json-schema.org/draft-07/schema#". Выбрать 2019-09 или 2020-12 нельзя.

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

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

Можно ли преобразовать JSON-массив на верхнем уровне?

Да. Корень получает "type": "array", а элементы объединяются в одну схему items, как в примере.

Спецификации и справка