Convertir JSON a un esquema MySQL — Numio
Genera sentencias CREATE TABLE de MySQL a partir de JSON de ejemplo. La raíz pasa a ser una tabla llamada generic; cada objeto o array anidado se convierte en una tabla hija con una clave foránea a la clave primaria de la tabla padre.
Esbozar un diseño de tablas normalizado para el payload de una API antes de escribir una migración real.
JSON
MySQL Schema
Cuándo usarla
- Esbozar un diseño de tablas normalizado para el payload de una API antes de escribir una migración real.
- Ver qué objetos y arrays anidados de un documento necesitarían tablas propias al migrar datos de una base de datos documental a MySQL.
Cómo usarla
- Pega en el editor izquierdo un objeto JSON, o un array de registros de ejemplo que se combinan en una sola tabla, o usa el botón de cargar archivo para abrir un archivo UTF-8.
- Lee las tablas generadas: la raíz es generic y las hijas son generic_<key>, enlazadas mediante claves foráneas generic_id.
- Copia el SQL y, antes de ejecutarlo, renombra las tablas y ajusta los tipos de columna (por ejemplo, DECIMAL para precios o longitudes de VARCHAR).
Objeto JSON de ejemplo
{
"id": 1024,
"total": 19.5,
"coupon": null,
"created_at": "2026-01-05T10:00:00Z",
"scores": [4, 4.5],
"items": [{ "sku": "A1", "qty": 2 }]
}Sentencias CREATE TABLE de MySQL
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) );
Detalles y limitaciones
Los enteros pasan a INT (BIGINT fuera del rango de 32 bits), los demás números a DOUBLE, las cadenas a TEXT y los booleanos a BOOLEAN. No se generan longitudes de VARCHAR, NOT NULL, AUTO_INCREMENT ni índices.
La clave primaria es una clave llamada id o que contenga _id; si no existe, se añade una columna id. Las cadenas de más de 18 caracteres que se pueden interpretar como fechas pasan a TIMESTAMP.
Los valores null pasan a columnas TEXT. Los arrays de escalares generan una tabla hija con una columna value cuyo tipo se deduce de todos los elementos (scores, arriba, es DOUBLE).
Se ejecuta en tu navegador; la salida no se valida contra un servidor MySQL.
FAQ
¿Por qué un valor decimal tiene el tipo DOUBLE y no DECIMAL?
La muestra no puede indicar la precisión que necesitas, así que los números no enteros pasan a DOUBLE. Cambia a mano las columnas de importes a DECIMAL(p,s).
¿Puedo elegir el nombre de la tabla?
No. La tabla raíz siempre es generic y las tablas hijas son generic_<key>. Renómbralas en el SQL copiado.
¿Genera sentencias INSERT?
No, solo CREATE TABLE. Para convertir filas JSON en sentencias INSERT usa la herramienta JSON a SQL.