IT Market
Инструменты/Код/Документы/SQL CREATE TABLE в JSON онлайн — конвертер
SQL → JSON

Конвертируйте SQL CREATE TABLE в JSON

Коротко об инструменте

SQL CREATE TABLE в JSON онлайн — конвертер

Страница читает не данные, а объявление таблицы: из выражения CREATE TABLE users (id INT, name VARCHAR(50), age INT) получается JSON с именем таблицы и списком колонок, у каждой из которых записан тип. Так схему из дампа переносят в описание API, в фикстуру для тестов или в задачу аналитику, не поднимая при этом сервер базы. Разбор выполняет скрипт страницы, ваш SQL остаётся в браузере. Запросы SELECT и INSERT здесь не обрабатываются. Смотрите также: показать полученную схему таблицей, проверить структуру схемы на ошибки, перенести схему в YAML.

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

  1. Вставьте одно выражение CREATE TABLE в поле «SQL на входе» — подсказка в поле показывает ожидаемый вид записи.
  2. Уберите комментарии и остальной дамп: разбирается объявление колонок внутри круглых скобок, а не весь файл сразу.
  3. Нажмите «Конвертировать» — в поле «JSON на выходе» появится имя таблицы и массив колонок с типами.
  4. Пересчитайте колонки в результате: ограничения, разнесённые на несколько строк, простой разбор может пропустить.
  5. Заберите готовую структуру кнопкой «Копировать» и вставьте её в документацию, схему или сид тестовых данных.

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

Можно ли получить сами строки таблицы, а не её схему?

Нет. Страница разбирает объявление колонок, то есть отвечает на вопрос «какие поля есть в таблице», а не «что в них лежит». Инструкции INSERT со значениями она не читает. Если у вас на руках выгрузка данных, конвертируйте её из CSV: страница «CSV в JSON» соберёт массив объектов, где заголовок файла станет набором ключей.

Какие диалекты SQL понимает разбор?

Формат объявления колонок у MySQL, PostgreSQL и SQLite почти совпадает, поэтому простое CREATE TABLE с перечислением полей и типов разбирается одинаково. Специфика диалектов начинается дальше: ENGINE и CHARSET у MySQL, SERIAL и схемы у PostgreSQL, кавычки-обратные апострофы вокруг имён. Такие хвосты лучше срезать перед вставкой, оставив скобки с колонками.

Сохраняются ли PRIMARY KEY, NOT NULL и внешние ключи?

Разбор здесь простой и нацелен на пару «имя колонки — тип». Ограничения, записанные отдельными строками после списка полей, в результат могут не попасть, а модификаторы вроде NOT NULL DEFAULT 0 иногда приклеиваются к типу текстом. Проверьте вывод глазами и допишите ограничения вручную, если схема идёт дальше в генератор миграций.

Что делать, если в дампе десяток таблиц подряд?

Вставляйте по одному выражению за раз. Разбор рассчитан на одно объявление, и при нескольких CREATE TABLE в поле результат окажется неполным или спутанным. Разбейте дамп на отдельные выражения, прогоните каждое и склейте объекты в общий массив уже в редакторе — так вы ещё и заметите таблицы, которые парсер не осилил.

Почему поле вывода осталось пустым?

Проверьте три вещи: есть ли в тексте ключевые слова CREATE TABLE, закрыта ли круглая скобка со списком колонок и не остались ли внутри многострочные комментарии. Скопированный из клиента фрагмент часто тянет за собой обратные апострофы и переносы, которые сбивают разбор. Уберите лишнее и оставьте одну строку в стиле подсказки поля.

Попадает ли структура базы на сторонний сервер?

Разбор целиком выполняет скрипт внутри открытой страницы: содержимое поля «SQL на входе» не отправляется ни на it-market.pro, ни куда-либо ещё. Для схемы это существенно — по именам таблиц и колонок нередко видно устройство продукта. Тем не менее, если правила вашей компании запрещают вставлять схему в веб-страницы, следуйте им.

Примеры

Таблица пользователей из дампа
До: CREATE TABLE users (id INT, name VARCHAR(50), age INT);
После: { "table": "users", "columns": [ {"name": "id", "type": "INT"}, {"name": "name", "type": "VARCHAR(50)"}, {"name": "age", "type": "INT"} ] }
Справочник заказов для описания API
До: CREATE TABLE orders (id INT, total DECIMAL(10,2), created_at DATETIME);
После: { "table": "orders", "columns": [ {"name": "id", "type": "INT"}, {"name": "total", "type": "DECIMAL(10,2)"}, {"name": "created_at", "type": "DATETIME"} ] }