VELDAT

JSON Schema из JSON

Текст обрабатывается в браузере и не отправляется на сервер.

Строит JSON Schema (черновик 2020-12) по примеру данных: типы полей, обязательные поля по всем элементам массива, целые и дробные числа, повторяющиеся объекты — в $defs. Схему можно скопировать или скачать.

Данные

Вставьте данные или откройте файл: дерево и перевод в другие форматы появятся здесь.

Схема появится, когда в поле будут данные

Дальше обычно делают

Что такое JSON Schema и зачем она нужна

JSON Schema — описание того, как должен выглядеть JSON: какие в нём поля, какого они типа и какие обязательны. Сама схема тоже записана в JSON, и её понимают программы: по ней проверяют данные на входе API, подсвечивают ошибки в файлах настроек, на ней описывают модели данных в документации API в формате OpenAPI.

Схема пригодится, когда нужно договориться о формате обмена с партнёром или подрядчиком, описать выгрузку для документации или настроить проверку входящих данных. Писать её с нуля долго, проще начать с примера: схема по нему — черновик, который стоит прочитать глазами. Поле, которое в примере есть у всех элементов, попадёт в обязательные, даже если на деле бывает пропущено. Ограничения, которых в примере не видно, — допустимые значения, длина строки, формат даты — добавляются вручную.

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

  1. Вставьте пример данных в поле слева или откройте файл. Чем больше элементов в массивах, тем точнее схема.

  2. Ниже, в секции «Структура», проверьте схему: какие поля есть у всех элементов и какого они типа.

  3. В шапке секции откройте «Выгрузить» и скопируйте или скачайте JSON Schema.

Пример

Было
{"id": 7, "tags": ["new"], "items": [{"sku": "A-100", "qty": 1}, {"sku": "B-205", "qty": 2, "discount": 5}]}
Стало
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string"
          },
          "qty": {
            "type": "integer"
          },
          "discount": {
            "type": "integer"
          }
        },
        "required": [
          "sku",
          "qty"
        ]
      }
    }
  },
  "required": [
    "id",
    "tags",
    "items"
  ]
}

Вопросы и ответы

Какие поля попадают в required?

Те, что есть у всех объектов этого места: у всех элементов массива, во всех повторах. В примере discount есть только у второго элемента, поэтому он в properties, но не в required.

Как различаются integer и number?

Если все значения поля целые, тип — integer; если встретилось хотя бы одно дробное — number. Поле, которое бывает и строкой, и null, получает "type": ["string", "null"].

Что такое $defs в схеме?

Если объект одной формы встречается в нескольких местах, например billing и shipping, его описание выносится в $defs, а в местах стоит ссылка $ref. Так схема короче, и форму легко поправить в одном месте.

Можно ли здесь проверить данные по готовой схеме?

Нет, здесь схема только строится по примеру. Проверка данных по JSON Schema не делается. Если нужны типы для кода, выгрузите TypeScript.

Задача сложнее инструмента

Архитектуру и интеграции с API можно обсудить на консультации: выберите время, и вы получите письменный итог с конкретными шагами.

Записаться на консультацию