JSON a Excel
JSON a Excel crea un libro .xlsx real en tu navegador — no un CSV renombrado a .xls. Los números siguen siendo números, el texto sigue siendo texto, la fila de cabecera queda congelada y con filtro, y los objetos anidados se convierten en rutas de columna explícitas. No se sube nada.
| id | customer.name | customer.email | total | currency | tags[0] | tags[1] | shipped | note |
|---|---|---|---|---|---|---|---|---|
| ord_1041 | Ada Lovelace | [email protected] | 148.5 | GBP | priority | gift | TRUE | — |
| ord_1042 | Grace Hopper | [email protected] | 92 | USD | standard | — | FALSE | Dejar con el vecino |
¿Cómo funciona JSON a Excel?
Casi todo conversor de «JSON a Excel» que hay en la web produce un archivo CSV con extensión .xls, y la diferencia importa más de lo que suena. Una celda CSV es texto y nada más. Excel entonces adivina: lee 00123 como el número 123 y se come los ceros a la izquierda, decide que 2026-10-03 es una fecha quieras o no, y convierte 1e5 en cien mil. Es Excel intentando ayudar, y no hay forma de impedirlo, porque el archivo no lleva tipos con los que discrepar.
Un libro lleva tipos. Esta herramienta escribe SpreadsheetML — las partes XML dentro de un .xlsx — así que un número JSON se convierte en una celda numérica, una cadena JSON en una celda de texto y un booleano en un booleano de verdad. "00123" sigue siendo 00123 porque el documento dijo que era una cadena.
Objetos anidados y arrays
Una hoja de cálculo es un rectángulo y JSON es un árbol, así que algo tiene que ceder. La opción elegida aquí es una codificación de rutas explícita, la misma que usa la herramienta JSON a CSV: customer.name para un miembro de objeto y tags[0] para un índice de array. Las dos notaciones son deliberadamente distintas, de modo que un nombre de columna nunca puede ser ambiguo sobre su origen.
El conjunto de columnas es la unión de los campos de cada registro, en el orden en que se ven por primera vez. La implementación obvia lee las claves del primer registro y pierde todo lo que aparece después — una nota opcional en uno de cada cincuenta pedidos, un descuento que solo se aplica a veces. Esos campos tienen aquí su columna, con celdas vacías en el resto.
Qué contiene el libro
Una fila de cabecera en negrita y congelada, para que los nombres de columna sigan en pantalla mientras te desplazas; un autofiltro, para acotar cualquier columna en un clic; y anchos de columna medidos a partir del valor más ancho de cada columna, en lugar de dejar el predeterminado de Excel. El archivo lo escribe el mismo escritor ZIP que usa la exportación de imágenes por lotes — no se carga ninguna librería de hojas de cálculo, porque el formato no ha cambiado desde 2006 y una dependencia para él sería lo más grande del bundle de esta ruta.
JSON de entrada
[
{ "id": 1, "user": { "name": "Ada" }, "tags": ["a","b"], "vip": true },
{ "id": 2, "user": { "name": "Grace" }, "tags": ["c"] }
]Celdas del libro
A1: id B1: user.name C1: tags[0] D1: tags[1] E1: vip A2: 1 B2: Ada C2: a D2: b E2: TRUE A3: 2 B3: Grace C3: c D3: (empty) E3: (empty)
JSON de entrada → Celdas del libro
JSON de entrada
[
{ "id": 1, "user": { "name": "Ada" }, "tags": ["a", "b"], "vip": true },
{ "id": 2, "user": { "name": "Grace" }, "tags": ["c"], "note": "gift" }
]Celdas del libro
id user.name tags[0] tags[1] vip note 1 Ada a b true 2 Grace c gift
¿Qué opciones y casos límite admite JSON a Excel?
| Parámetro | Tipo | Valor predeterminado | Comportamiento y casos límite |
|---|---|---|---|
| Formato de salida | .xlsx | SpreadsheetML | Un libro OOXML de verdad: celdas con tipo, cabecera congelada, autofiltro y anchos de columna medidos. Un CSV renombrado a .xls no puede llevar nada de eso, y ahí está toda la diferencia. |
| Números | tipo de celda | numérico | Un número JSON se convierte en una celda numérica, así que las sumas y los promedios funcionan de inmediato. Un número escrito como cadena JSON sigue siendo una cadena, y eso es lo que preserva códigos de producto, números de teléfono y ceros a la izquierda. |
| Matrices | explode | join | explode | Explode genera tags[0], tags[1] y conserva cada elemento. Join concentra un array de escalares en una sola celda separada por tu delimitador; suele ser lo que busca quien lee la hoja, y tiene pérdida. Un array de objetos siempre se pasa por explode, porque unirlo destruiría la estructura. |
| Objetos anidados | ruta de columna | customer.name | Rutas con puntos para los miembros de un objeto y corchetes para los índices de array, de modo que ambos se distinguen y el conjunto de columnas no admite ambigüedad. Un conversor que pega [object Object] en una celda es el fallo que esto evita. |
| Conjunto de columnas | unión | todos los registros | Todos los campos que aparecen en cualquier registro, en el orden en que se ven por primera vez. Leer la cabecera del primer registro es la forma más habitual de que una exportación pierde datos en silencio. |
| Cabecera congelada | booleano | true | Inmoviliza la fila 1, así los nombres de columna siguen a la vista mientras te desplazas por una exportación larga. Excel lo llama «Inmovilizar paneles», y se guarda en la vista de la hoja en vez de dejarse configurar a quien la lea. |
| Autofiltro | booleano | true | Añade los desplegables de filtro a la fila de cabecera. Necesita al menos una fila de datos, porque un filtro sobre una cabecera sola no tiene nada que filtrar. |
| Estructura de nivel superior | array | object | array | Un array de registros es la entrada esperada. Un objeto suelto se convierte en una fila. Un objeto cuyo único miembro array es el propio dato — la envoltura {"data":[…]} que devuelven la mayoría de las API — usa ese array y así lo indica. |
| Tamaño de entrada | bytes | 8 MB | Todo se ejecuta en el hilo principal, así que por encima de este techo el libro se rechaza en lugar de intentarse. No se sube nada, sea cual sea el tamaño. |
Preguntas frecuentes
¿Esto es un archivo Excel de verdad o un CSV con otra extensión?
Un libro de verdad. La salida es un .xlsx OOXML: un ZIP de partes SpreadsheetML, con celdas con tipo, una fila de cabecera congelada y en negrita, un autofiltro y anchos de columna medidos. Esa es la diferencia que importa — un CSV renombrado a .xls no lleva tipos, así que Excel tiene que adivinar cada celda y se equivoca con los ceros a la izquierda, los códigos de producto y cualquier cosa que parezca una fecha.
¿Mis ceros a la izquierda sobrevivirán?
Sí, si el JSON los tenía como cadena. {"sku":"00123"} escribe el texto 00123 y Excel muestra 00123, porque la celda dice que es texto. {"sku":123} escribe el número 123, y eso significa que el documento es exacto, no que la herramienta pierda algo. Es la queja más común sobre los exportadores basados en CSV y la razón por la que este escribe un libro.
¿Qué pasa con los objetos anidados y los arrays?
Se convierten en rutas de columna: {"customer":{"name":"Ada"}} produce una columna llamada customer.name, y tags se convierte en tags[0], tags[1]. La forma con corchetes para arrays es deliberadamente distinta de la forma con puntos para objetos, así que un nombre de columna nunca puede ser ambiguo sobre su origen. Cambia los arrays al modo Join para tenerlos en una sola celda — es una operación con pérdida, y solo se aplica a arrays de escalares.
Algunos registros tienen campos que otros no. ¿Se descartan?
No. El conjunto de columnas es la unión de los campos de todos los registros, en el orden en que aparecen por primera vez, así que una nota que aparece en un pedido de cada cincuenta sigue teniendo su propia columna, con celdas vacías en el resto. Los exportadores que leen la cabecera del primer registro pierden esos campos sin avisar.
¿Mis datos se suben a algún sitio?
No. El libro se ensambla en tu navegador y pasa directamente a la descarga. Abre DevTools, ve al panel «Network», pega un documento y pulsa «Descargar»: ninguna petición lo transporta. Aquí importa más de lo que parece: el JSON que la gente mete en una hoja de cálculo suele ser una exportación real de registros reales.
¿Qué tamaño de documento admite?
8 MB de JSON, es decir, decenas de miles de registros. Por encima, la herramienta se niega en lugar de congelar la pestaña, porque el trabajo ocurre en el hilo principal. El libro en sí es pequeño respecto a la entrada: el ZIP contiene texto XML y se escribe con entradas stored en lugar de deflated, así que espera un archivo un poco más grande que el CSV equivalente.