Inicio › Herramientas para desarrolladores › Convertidor de JSON a SQL

Convertidor de JSON a SQL

Pega un array JSON de objetos y obtén una sentencia CREATE TABLE con tipos de columna deducidos, además de sentencias INSERT para MySQL, PostgreSQL, SQLite o SQL Server. Los objetos anidados se pueden guardar como columnas JSON o aplanarse en columnas separadas.

Última actualización:

Convierte automáticamente mientras escribes. No se sube nada.
Columnas detectadas
#ColumnaTipo SQLNulos / ausentesEjemplo
Publicidad
Publicidad

Cómo usar Convertidor de JSON a SQL

  1. Pega tu JSON (un array de objetos), sube un archivo .json o haz clic en Ejemplo.
  2. Elige el dialecto SQL y escribe el nombre de la tabla.
  3. Decide cómo tratar los datos anidados: mantenerlos como columna JSON o aplanarlos en columnas separadas.
  4. Ajusta las opciones: filas por INSERT, CREATE/DROP TABLE, clave primaria, NOT NULL y transacción.
  5. Copia o descarga el archivo .sql y ejecútalo en tu cliente de base de datos.

Correspondencia de tipos por dialecto

Valores JSON en la columnaMySQLPostgreSQLSQLiteSQL Server
Números enteros (42)INTINTEGERINTEGERINT
Números enteros por encima de 2,147,483,647BIGINTBIGINTINTEGERBIGINT
Decimales (1250.5)DECIMAL(p,s)NUMERIC(p,s)REALDECIMAL(p,s)
true / falseBOOLEANBOOLEANINTEGER (1/0)BIT (1/0)
"2024-01-15"DATEDATETEXTDATE
"2024-01-15T09:30:00"DATETIMETIMESTAMPTEXTDATETIME2
"2024-01-15T09:30:00Z"VARCHAR(35)TIMESTAMPTZTEXTDATETIMEOFFSET
Cadenas de hasta 255 caracteresVARCHAR(n)VARCHAR(n)TEXTNVARCHAR(n)
Cadenas más largasTEXTTEXTTEXTNVARCHAR(MAX)
Objetos y arraysJSONJSONBTEXTNVARCHAR(MAX)

Una columna que contiene valores de distintos tipos JSON (por ejemplo, números en algunas filas y cadenas en otras) pasa a VARCHAR o TEXT para que quepan todos los valores. null y las claves ausentes siempre se convierten en NULL de SQL. Las longitudes de VARCHAR se redondean hacia arriba a 10, 20, 50, 100, 150 o 255 caracteres para dejar un poco de margen a valores más largos en el futuro.

Ejemplo

El JSON [{"id":1,"name":"Ann","tags":["a"]},{"id":2,"name":"O'Brien"}] con el dialecto PostgreSQL produce:

CREATE TABLE "users" (
  "id" INTEGER NOT NULL,
  "name" VARCHAR(10),
  "tags" JSONB,
  PRIMARY KEY ("id")
);

INSERT INTO "users" ("id", "name", "tags") VALUES
  (1, 'Ann', '["a"]'),
  (2, 'O''Brien', NULL);

¿Columna JSON o columnas aplanadas?

  • La columna JSON conserva la estructura original y es adecuada para datos que normalmente vuelves a leer completos. JSONB de PostgreSQL y JSON de MySQL se pueden consultar igualmente con operadores como ->> y JSON_EXTRACT().
  • Aplanar convierte los objetos anidados en columnas normales (address_city, address_zip), que son más fáciles de indexar, filtrar y unir. Los arrays se siguen guardando como texto JSON porque pueden contener cualquier número de elementos; para datos de uno a muchos reales, muévelos a una tabla aparte.
  • Para millones de registros, una herramienta de carga masiva es más rápida que las sentencias INSERT: PostgreSQL puede cargar líneas JSON con COPY, MySQL con LOAD DATA, y SQL Server puede leer JSON directamente con OPENJSON.

Preguntas frecuentes

¿Qué estructura JSON espera el convertidor?

Un array de objetos, donde cada objeto es una fila y cada clave es una columna, por ejemplo [{"id":1,"name":"Ann"},{"id":2,"name":"Bo"}]. Un solo objeto se convierte en una fila, y si el array está dentro de un objeto contenedor como {"data":[...]} o {"results":[...]}, se usa automáticamente el primer array de objetos.

¿Cómo se eligen los tipos de columna?

Se analizan los valores de cada columna en todas las filas. Los números enteros pasan a INT, o a BIGINT por encima de 2,147,483,647; los números con decimales pasan a DECIMAL(p,s) con el tamaño necesario; true/false pasa a BOOLEAN (BIT en SQL Server, INTEGER en SQLite); las cadenas con forma de AAAA-MM-DD o de fecha y hora pasan a DATE o DATETIME/TIMESTAMP; el resto de cadenas pasan a VARCHAR con el tamaño del valor más largo, o a TEXT si superan los 255 caracteres.

¿Qué pasa con los objetos y arrays anidados?

Por defecto se guardan como texto JSON en una columna de tipo JSON: JSON en MySQL, JSONB en PostgreSQL, NVARCHAR(MAX) en SQL Server y TEXT en SQLite. Elige Aplanar para convertir {"address":{"city":"Oslo"}} en una columna llamada address_city; los arrays se siguen guardando como JSON.

¿Y si los objetos tienen claves distintas?

El convertidor reúne todas las claves en el orden en que aparecen por primera vez. Cuando a un objeto le falta una clave, se inserta NULL en esa columna.

¿Cómo se escapan las comillas y los caracteres especiales?

Las cadenas se encierran entre comillas simples y las comillas simples internas se duplican ('O''Brien'), que es SQL estándar. La salida de MySQL también escapa las barras invertidas, y las cadenas de SQL Server usan el prefijo N'...' para conservar Unicode.

¿Los números muy grandes se conservan con exactitud?

Los números JSON se leen como valores de doble precisión de JavaScript, que son exactos hasta 9,007,199,254,740,991. Los enteros más grandes, como algunos ID de 64 bits, deben guardarse como cadenas en tu JSON para conservar todos los dígitos.

¿Se envía mi JSON a un servidor?

No. El análisis y la generación de SQL se ejecutan por completo en tu navegador, así que tus datos nunca salen de tu dispositivo.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Conversores de datos y formatos de archivo →