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

Преобразование JSON в схему MySQL — Numio

Генерирует операторы MySQL CREATE TABLE по образцу JSON. Корень становится таблицей generic; каждый вложенный объект или массив становится дочерней таблицей с внешним ключом на первичный ключ родителя.

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

JSON

MySQL Schema

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

  • Набросок нормализованной структуры таблиц для API-payload перед написанием настоящей миграции.
  • Оценка при переносе данных из документной базы в MySQL, каким вложенным объектам и массивам документа понадобятся собственные таблицы.

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

  1. Вставьте JSON-объект или массив образцов записей, которые объединяются в одну таблицу, в левый редактор или откройте файл в кодировке UTF-8 кнопкой загрузки файла.
  2. Изучите сгенерированные таблицы: корень — generic, дочерние — generic_<key>, связанные внешними ключами generic_id.
  3. Скопируйте SQL и перед выполнением переименуйте таблицы и поправьте типы столбцов (например, DECIMAL для цен или длины VARCHAR).

Образец JSON-объекта

{
  "id": 1024,
  "total": 19.5,
  "coupon": null,
  "created_at": "2026-01-05T10:00:00Z",
  "scores": [4, 4.5],
  "items": [{ "sku": "A1", "qty": 2 }]
}

Операторы MySQL CREATE TABLE

CREATE TABLE generic (
  id INT,
  total DOUBLE,
  coupon TEXT,
  created_at TIMESTAMP,
  PRIMARY KEY (id)
);

CREATE TABLE generic_scores (
  generic_id INT,
  id INT,
  value DOUBLE,
  PRIMARY KEY (id),
  FOREIGN KEY (generic_id) REFERENCES generic(id)
);

CREATE TABLE generic_items (
  generic_id INT,
  id INT,
  sku TEXT,
  qty INT,
  PRIMARY KEY (id),
  FOREIGN KEY (generic_id) REFERENCES generic(id)
);

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

Целые числа становятся INT (BIGINT за пределами 32-битного диапазона), прочие числа — DOUBLE, строки — TEXT, булевы значения — BOOLEAN. Длины VARCHAR, NOT NULL, AUTO_INCREMENT и индексы не генерируются.

Первичный ключ — ключ с именем id или содержащий _id; если такого нет, добавляется столбец id. Строки длиннее 18 символов, разбираемые как даты, становятся TIMESTAMP.

Значения null становятся столбцами TEXT. Массивы скаляров получают дочернюю таблицу со столбцом value, тип которого определяется по всем элементам (scores выше — DOUBLE).

Работает в браузере; вывод не проверяется на сервере MySQL.

FAQ

Почему дробное значение получает тип DOUBLE, а не DECIMAL?

По образцу нельзя понять нужную точность, поэтому нецелые числа становятся DOUBLE. Для денежных столбцов замените тип на DECIMAL(p,s) вручную.

Можно ли выбрать имя таблицы?

Нет. Корневая таблица всегда называется generic, дочерние — generic_<key>. Переименуйте их в скопированном SQL.

Генерируются ли операторы INSERT?

Нет, только CREATE TABLE. Чтобы превратить строки JSON в операторы INSERT, используйте инструмент JSON to SQL.

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