Conversió de JSON a Excel: aplanament d'estructures jeràrquiques en fulls de càlcul
El convertidor de JSON a Excel (XLSX) és una eina de navegador que accepta un fitxer JSON (un únic arxiu cada vegada) i el transforma en un fitxer XLSX descarregable. La conversió es fa íntegrament al client: cap dada s'envia a cap servidor. Aquesta pàgina explica el funcionament, les regles d'aplanament, el tractament de tipus de dades i els límits pràctics de l'eina.
Per què aquesta conversió no és equivalent a la de CSV o Excel
A diferència de la conversió des de CSV o Excel —que ja parteixen d'una taula plana—, el format JSON permet jerarquies arbitràries: objectes dins d'objectes, arrays de valors, arrays d'objectes i tipus primitius (nombres, booleans, null). Per representar aquesta estructura en un full de càlcul, que és intrínsecament pla (files i columnes), cal aplicar una regla d'aplanament sistemàtica.
L'eina utilitza el mètode de claus amb ruta de punts (dot‑path keys). Exemple: un JSON com { "usuari": { "nom": "Anna", "adreça": { "ciutat": "Barcelona", "cp": "08001" } } } es converteix en una sola fila amb les columnes usuari.nom, usuari.adreça.ciutat i usuari.adreça.cp. Cada objecte de l'arrel esdevé una fila; cada clau esdevé un encapçalament de columna, amb les claus imbricades concatenades amb punts.
Aquesta transformació és necessària perquè el full de càlcul no pot representar objectes ni arrays ni jerarquies de manera nativa. El resultat és una taula on cada cel·la conté un valor escalar (text, nombre, booleà o buit). No es preserven fórmules ni estils —l'eina genera un sol full amb dades estàtiques.
Format de sortida: XLSX i tipus de dades
El fitxer de sortida és un XLSX (format Workbook XML comprimit en ZIP). A diferència del CSV, que ho converteix tot a text, l'XLSX pot emmagatzemar tipus natius:
| Tipus JSON | Tipus en XLSX | Comportament |
|---|---|---|
| Nombre | Nombre | Es manté el valor numèric. Ex.: 42 → cel·la amb valor 42, no "42". |
| Booleà | Booleà | Cel·la amb valor VERITAT/FALS. |
null |
Cel·la buida | No s'escriu cap dada. |
| Cadena de text | Cadena | Exactament com al JSON. |
Aquesta preservació de tipus és un avantatge respecte al CSV, especialment per a anàlisis numèriques posteriors a Excel. L'eina no aplica cap càlcul de fórmules; la sortida conté només les dades estàtiques obtingudes del JSON d'entrada.
Regles d'aplanament per a JSON jeràrquic
L'eina espera un JSON amb forma de taula —és a dir, o bé un array d'objectes o bé un array d'arrays. El tractament difereix segons el cas:
Array d'objectes
Cada objecte de l'array es converteix en una fila. Les claus de l'objecte, incloses les imbricades, defineixen les columnes. Exemple:
[
{ "nom": "Joan", "notes": },
{ "nom": "Maria", "notes": }
]
L'aplanament produeix les columnes nom i notes. L'array de valors simples es tracta com un valor de cadena JSON serialitzat. Per tant, notes esdevindria una cel·la amb el text ``.
Per a arrays d'objectes, es pot donar el cas que un objecte tingui un array d'objectes interns. Exemple:
[
{
"id": 1,
"comandes": [
{ "producte": "A", "quantitat": 2 },
{ "producte": "B", "quantitat": 1 }
]
}
]
Aquí, comandes és un array d'objectes. L'eina no expandeix aquest array en files separades. En canvi, l'array sencer es converteix en una cadena JSON i es col·loca en una sola cel·la. El resultat seria:
| id | comandes |
|---|---|
| 1 | [{"producte":"A","quantitat":2},{"producte":"B","quantitat":1}] |
Array d'arrays
Si el JSON és un array d'arrays (per exemple, [[ "a", 1 ], [ "b", 2 ]]), cada subarray es converteix en una fila, i no es genera cap fila de capçalera.
Regles i casos límit (edge cases)
L'eina valida el fitxer d'entrada i mostra missatges d'error en situacions concretes. Aquests són els principals:
- Format no admès: "Choose a CSV, JSON or XLSX file."
- Fitxer massa gran: "This file is too large. Use a file under 8 MB."
- JSON invàlid o no en forma de taula: "This JSON is invalid or not table-shaped."
- Sense files de taula: "This file has no table rows."
- Massa files: "This table has more than ‹max› rows." (El límit és de 10.000 files)
- Massa columnes: "This table has more than ‹max› columns." (El límit és de 200 columnes)
- Cancel·lació de l'usuari: "Conversion cancelled."
- Temps excedit: "This conversion is taking too long. Try a smaller file."
L'eina genera una vista prèvia del resultat (les primeres 8 files i 8 columnes), mostra el nombre de files i columnes, i la mida del fitxer de sortida.
Qui necessita aquesta eina i per què
Els usuaris típics són:
- Analistes de dades que reben dades d'API en JSON i necessiten tractar‑les amb Excel o altres eines de full de càlcul. Poden evitar escriure codi Python o JavaScript per aplanar el JSON.
- Persones que treballen amb configuracions o dades jeràrquiques (per exemple, fitxers de configuració en JSON) i volen compartir‑les amb companys que només fan servir Excel.
- Equips que necessiten preservar tipus numèrics i booleans (cosa que no fa el CSV, que ho converteix tot a text). Per a anàlisis posteriors, és útil mantenir els nombres com a nombres.
- Professionals de la privadesa de dades: com que tot es processa al navegador, no cal pujar fitxers a cap servidor, la qual cosa redueix el risc de fuita.
Limitacions de la representació en taula plana
Cap conversió de JSON a Excel pot representar fidelment totes les estructures possibles. Les limitacions principals són:
- Objectes imbricats múltiples: Només es pot aplanar fins a un cert nivell, però sempre es perden les relacions de profunditat (per exemple, un arbre de categories). La taula plana no pot expressar la jerarquia sense repeticions.
- Arrays d'objectes dins d'objectes: Un array que conté objectes amb el mateix conjunt de claus no s'expandeix en múltiples files. En canvi, l'array sencer es converteix en una cadena JSON i es col·loca en una sola cel·la.
- Arrays d'arrays de diferent longitud: Es generaran files amb cel·les buides per als índexs que falten.
- Valors
null: Es converteixen en cel·les buides, cosa que pot portar a confusió si es confon amb un valor zero o una cadena buida. - Pèrdua de tipus complexos: No es poden representar estructures com arrays d'objectes en una sola cel·la; o es serialitzen com a text (perdent la semàntica) o s'aplanen, generant múltiples files.
Per a dades molt jeràrquiques, una millor alternativa és utilitzar un format com JSON nadiu o bases de dades NoSQL, però per a intercanvi amb usuaris d'Excel, l'aplanament és la solució pràctica.
Preguntes freqüents (FAQ)
1. Puc convertir un fitxer JSON amb molts nivells d'objectes?
Sí, però l'aplanament crearà noms de columna molt llargs (per exemple, nivell1.nivell2.nivell3.clau). Si el JSON té objectes amb claus molt variables, l'algorisme d'aplanament pot produir moltes columnes, superant el límit de columnes.
2. Què passa si el JSON conté arrays amb objectes que no tenen la mateixa estructura?
Es crearan columnes amb dades buides per als objectes que manquin claus. Per exemple, si un objecte té "nom" i un altre "nom" i "edat", la taula tindrà la columna nom i edat, i les files sense edat quedaran buides.
3. L'eina conserva els decimals i les dates en format JSON?
Els decimals es conserven com a nombres (p. ex., 3.14 → 3,14 a Excel si la configuració regional ho permet). Les dates en JSON es converteixen a text ISO.
4. Puc seleccionar més d'un fitxer alhora?
No, l'eina processa un fitxer a la vegada.
5. Per què el meu fitxer JSON amb un objecte arrel no es converteix?
Un sol objecte s'accepta i es converteix en una taula d'una sola fila. Si el JSON no és vàlid o no té forma de taula, l'eina mostrarà el missatge "This JSON is invalid or not table-shaped."
6. El fitxer XLSX de sortida es pot obrir amb Google Sheets o LibreOffice?
Sí, el format XLSX és estàndard i compatible amb la majoria de programes de full de càlcul.
Conclusió pràctica
L'eina de JSON a Excel resol un problema concret: transformar dades jeràrquiques en una taula plana amb tipus preservats. No és una solució universal per a cap estructura JSON, però cobreix el cas d'ús més comú (array d'objectes amb imbricació simple). Per a usuaris que han d'evitar escriure codi o que valoren la privadesa (processament local), és una opció eficient. Cal estar atent a les limitacions d'aplanament i als missatges d'error, que indiquen quan el JSON no s'adapta al model de taula.