100 % local: tus datos nunca salen de tu navegador

JSON a MySQL — un CREATE TABLE que se ejecuta

Convierte una muestra JSON en un CREATE TABLE de MySQL. Los tipos salen de los valores, y una cadena larga para VARCHAR(255) recibe TEXT en su lugar.

Instantáneo Privado Cero cookies

Entrada JSON

Salida MySQL

Qué hace esta herramienta

Una muestra JSON pasa a ser un CREATE TABLE.

{ "id": 1, "firstName": "Ada", "score": 9.5, "address": { "city": "Paris" } }
CREATE TABLE `root` (
  `id` BIGINT NOT NULL,
  `first_name` VARCHAR(255) NOT NULL,
  `score` DOUBLE NOT NULL,
  `address` JSON NOT NULL
);

Los nombres de columna van en snake_case y entre acentos graves, así que una palabra reservada o un guion en una clave no es problema. Dos claves que dan el mismo nombre llevan sufijo en vez de fundirse.

Una columna a la medida del valor

Las cadenas pasan a VARCHAR(255), salvo cuando la muestra enseña que no caben:

{ "bio": "…301 caracteres…" }
  `bio` TEXT NOT NULL

MySQL en modo estricto —el valor por defecto desde 5.7— rechaza un valor más largo que la columna con el error 1406. Un VARCHAR(255) aquí te habría dado una tabla incapaz de contener el documento que la generó. Era un defecto real, encontrado al escribir esta página y corregido.

El límite viene del valor más largo de la muestra: es un suelo, no una promesa. Si tus cadenas de producción son más largas que lo que pegaste, ensancha la columna.

Todas las filas, no solo la primera

[{ "a": 1 }, { "a": 2, "b": "x" }]
CREATE TABLE `root_item` (
  `a` BIGINT NOT NULL,
  `b` VARCHAR(255) NULL
);

La tabla se construía solo con el primer objeto: la segunda fila de tu propia muestra fallaba al insertarse —Unknown column 'b'—. Ahora las columnas son la unión de todos los objetos, y una clave que falta en algunos es nullable, porque lo es.

El tipo sigue la misma regla. Una clave que vale 1 en una fila y "x" en la siguiente tomaba el tipo de la primera que apareciera, y el otro valor se quedaba sin columna donde entrar; ahora recibe una columna JSON, que sostiene las dos. Un valor de 300 caracteres que solo aparece en la décima fila ensancha la columna a TEXT igual que si hubiera sido la primera.

Lo que no se inventa

  • Ni clave primaria, ni índice, ni cláusula de motor o juego de caracteres. Son decisiones sobre tus datos y tu servidor; un documento no dice nada de ellas.
  • NOT NULL allí donde había un valor, NULL para un null y para una clave ausente en algunas filas.
  • Los objetos y arrays pasan a columnas JSON. Sin tabla relacionada ni clave foránea: una muestra no puede enseñar una relación, e inventar una apilaría tres suposiciones.

Privado por diseño

Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.

Preguntas frecuentes

¿Por qué una de mis columnas es TEXT y las demás VARCHAR(255)?
Porque ese valor no cabía. `VARCHAR(255)` es el valor por defecto aquí, y MySQL en modo estricto rechaza un valor más largo con el error 1406: la tabla no contendría la muestra de la que salió. Pasados los 255 caracteres, la columna pasa a `TEXT`. Si tus datos reales son más largos que la muestra, ensánchala tú.
¿Dónde está la clave primaria?
En ningún sitio: una muestra no dice qué columna identifica una fila. Un `id` que parece único en un documento puede repetirse en el siguiente. Añadir `PRIMARY KEY (id)` —o un sustituto `AUTO_INCREMENT`— es una línea, y es una decisión sobre tus datos, no una lectura de ellos.
¿Por qué mi objeto anidado es una columna JSON?
Porque SQL no tiene tipos anidados y una muestra no enseña relaciones. `{"address": {"city": "Paris"}}` puede ser una tabla unida o un bloque que pertenece a la fila; inventar la tabla, la clave foránea y el sentido serían tres suposiciones. MySQL 5.7 y posteriores lo guardan como `JSON`, que sigue siendo consultable.

Convertidores relacionados