Hvorfor JSON til Excel er annerledes enn CSV-konvertering
JSON (JavaScript Object Notation) er et tekstbasert dataformat som naturlig støtter hierarkier: objekter inne i objekter, arrays med objekter, og en blanding av tall, boolske verdier, null og strenger. Et regneark er derimot iboende flatt – én celle, én verdi. Når du konverterer JSON til Excel (XLSX), må den underliggende strukturen flates ut på en måte som CSV aldri trenger, fordi CSV allerede er en flat tabell.
Det som gjør denne konverteringssiden særegen, er at den anvender en bestemt flatingsregel: dot-path-nøkler. For eksempel blir {"navn": "Ola", "adresse": {"by": "Oslo", "postnr": 0150}} til kolonnene navn, adresse.by og adresse.postnr. En CSV-konvertering ville bare skrevet råverdier uten å håndtere hierarkiet, eller ville krevd manuell forbehandling. I tillegg bevarer XLSX-formatet opprinnelige datatyper som tall og boolske verdier, noe CSV reduserer til tekst. Dette verktøyet skriver derfor ikke formler eller celleformatering, men legger inn den statiske, synlige dataen slik den kommer fra JSON.
Hvordan flating av JSON-strukturer fungerer
Verktøyet forventer én JSON-fil om gangen, og JSON-en må være «tabell-formet» – altså en array av objekter eller en array av arrays. Hvis filen inneholder et enkelt objekt, tolkes det som én rad med nøklene som kolonneoverskrifter. Under flatingen behandles nestede objekter slik:
- Hvert par med nøkkel og verdi i et objekt blir en kolonne.
- Er verdien et nytt objekt, blir nøklene i det objektet prefixet med den ytre nøkkelen og et punktum.
- Arrays av objekter blir rader; hvert objekt i arrayen blir en ny rad, og kolonneoverskriftene hentes fra unionen av alle nøkler på tvers av objektene.
- Arrays av arrays (f.eks. ``) blir tolket som rader der hvert element i den indre arrayen blir en kolonne (kolonnenavn blir
0,1,2osv.).
Et eksempel på en JSON som inneholder nestede objekter:
[
{
"id": 1,
"navn": "Kari",
"kontakt": {
"epost": "kari@eksempel.no",
"telefon": 99887766
},
"aktiveProsjekter": ["Prosjekt A", "Prosjekt B"]
},
{
"id": 2,
"navn": "Per",
"kontakt": {
"epost": "per@eksempel.no"
}
}
]
Resultatet i Excel blir følgende tabell:
| id | navn | kontakt.epost | kontakt.telefon | aktiveProsjekter |
|---|---|---|---|---|
| 1 | Kari | kari@eksempel.no | 99887766 | ["Prosjekt A", "Prosjekt B"] |
| 2 | Per | per@eksempel.no | (tom) | (tom) |
Merk at arrays av primitiver blir strengifisert til JSON-tekst i en enkelt celle. Hvis to objekter har arrays av ulik lengde, vil de manglende cellene bli tomme.
Datatyper: fra JSON til Excel-celler
JSON har seks datatyper: string, number, boolean, null, object, array. XLSX (det underliggende formatet i en .xlsx-fil) kan lagre tekst, tall, boolske verdier, datoer og feilverdier. Denne konverteringen bevarer så langt det er mulig de opprinnelige typene:
| JSON-type | XLSX-representasjon |
|---|---|
| string | Tekstcelle |
| number | Tallcelle (desimaltall eller heltall) |
| boolean | Boolsk celle (TRUE/FALSE) |
| null | Tom celle (ingen verdi) |
| object | Flates ut til dot-path-kolonner (se over) |
| array | Flates ut til indekserte kolonner |
Det er viktig å merke seg at dette er en forskjell fra CSV, der alle verdier blir strenger. Hvis du for eksempel har JSON-koden {"temp": 23.5, "aktiv": true}, vil Excel-cellen for temp være et tall (23,5) og aktiv vil være en boolsk verdi (TRUE). Dette gjør at du kan utføre regnearkfunksjoner som summering og gjennomsnitt direkte, uten å måtte konvertere tekst til tall først. Null-verdier blir stående tomme – de skrives ikke som teksten «null».
XLSX-filen er en zippet XML-samling som kan inneholde flere regneark, celleformatering og formler. Dette verktøyet produserer bare ett regneark (Sheet1) og skriver utelukkende statiske data. Ingen formler, betinget formatering eller cellebakgrunner blir overført fra JSON.
Teknisk gjennomgang av konverteringsprosessen
Konverteringen skjer utelukkende i nettleseren (client-side). Ingen filer lastes opp til noen server. Dette har to fordeler: personvern (dataene forlater ikke din maskin) og ytelse (ingen nettverksforsinkelse). Verktøyet leser JSON-filen, validerer at den er syntaktisk korrekt, og sjekker om den er tabell-formet. Deretter bygges en midlertidig tabell rad for rad, basert på dot-path-flating. Når alle radene er generert, opprettes et nytt XLSX-arbeidshefte. Hele filen konstrueres i minnet og tilbys som en nedlastingslenke.
Under flatingen samler verktøyet alle unike dot-path-nøkler fra hele JSON-strukturen. Hvis ett objekt mangler en nøkkel som finnes i et annet objekt, blir den cellen tom. Dette er en naturlig konsekvens av at Excel-tabeller må ha samme kolonner for alle rader.
Hvis JSON-en består av en array med arrays, hoppes flatingen over: hvert indre array blir en rad, og cellene er elementene i den rekkefølgen de står. Kolonnenavnene blir indekser (0, 1, 2, …).
Verktøyet viser en forhåndsvisning av den konverterte tabellen (de første 8 radene og 8 kolonnene), samt antall rader og kolonner, og størrelsen på den ferdige XLSX-filen før nedlasting. Dette lar deg kontrollere at flatingen ble som forventet.
Feilmeldinger og begrensninger
Verktøyet er designet for å håndtere et begrenset sett med JSON-strukturer. Feilmeldingene er konkrete og gir deg beskjed om hva som gikk galt:
| Betingelse | Feilmelding |
|---|---|
| Ingen fil valgt | «Choose one file first.» |
| Filen er ikke JSON, CSV eller XLSX | «Choose a CSV, JSON or XLSX file.» |
| Filen overskrider maksimal tillatt størrelse | «This file is too large. Use a file under ‹max›.» |
| JSON-en er ugyldig eller ikke tabell-formet | «This JSON is invalid or not table‑shaped.» |
| JSON-en har ingen rader (tom array) | «This file has no table rows.» |
| Brukeren avbryter konverteringen | «Conversion cancelled.» |
| Konverteringen tar for lang tid | «This conversion is taking too long. Try a smaller file.» |
Grensene for maks størrelse, rader og kolonner er 8 MB, 10 000 rader og 200 kolonner. Disse grensene eksisterer for å forhindre at nettleseren låser seg med svært store filer. Det er også verdt å merke seg at flatingen produserer kun ett regneark. Hvis JSON-en inneholder flere uavhengige arrays som du ønsker i separate ark, må du konvertere hver array for seg.
En annen viktig begrensning: verktøyet kan ikke håndtere dypt nestede arrays av arrays (f.eks. en array med arrays av arrays) – den flater bare ett nivå av indre array, der hvert element blir en kolonne. Hvis du har [] vil den ytre arrayen ha ett element (en array av arrays), og det elementet flates ikke videre; du får en kolonne med en serialisert verdi eller feil.
Hvem verktøyet er nyttig for
Dette verktøyet passer for alle som mottar JSON-data fra en API, en konfigurasjonsfil eller en database og trenger å analysere dem i et regneark. Typiske brukere er:
- Dataanalytikere som må flate ut nestede API-responser uten å skrive egne Python-skript.
- Utviklere som raskt vil se strukturen i en JSON-fil i et lesbart tabellformat.
- Teammedlemmer som samarbeider med kolleger som bare bruker Excel, og som derfor trenger dataene i .xlsx-format med korrekte datatyper.
- Alle som tidligere har konvertert JSON til CSV og opplevd at tall og boolske verdier ble til tekst.
Fordi konverteringen skjer lokalt, er verktøyet også egnet for sensitive data som ikke bør sendes til en ekstern server.
FAQ
1. Hvorfor blir kolonnenavnene mine rare med punktum i seg?
Punktumet angir at en kolonne kommer fra et underobjekt. For eksempel betyr adresse.by at verdien opprinnelig lå i objektet adresse under nøkkelen by. Dette er en standard måte å gjøre hierarkiske data om til flate kolonneoverskrifter på, og lar deg se den opprinnelige strukturen.
2. Kan jeg få flere regneark i samme Excel-fil? Nei, verktøyet produserer bare ett regneark, som får navnet Sheet1. Hvis du har flere uavhengige JSON-strukturer, må du konvertere dem én etter én og lime inn i separate ark manuelt.
3. Hva skjer hvis JSON-en har en array med objekter som ikke har samme nøkler? Alle unike nøkler på tvers av objektene blir kolonner. Der et objekt mangler en nøkkel, blir cellen tom. Det er ingen feil, men du kan få mange tomme celler hvis strukturene er svært ulike.
4. Blir dataene mine lastet opp til en server? Nei. Hele konverteringen foregår i nettleseren din. Ingen data sendes over nettet. Dette sikrer personvernet for sensitive JSON-filer.
5. Hvorfor får jeg feilmeldingen «This JSON is invalid or not table‑shaped»?
Denne feilen oppstår når JSON-en ikke er syntaktisk gyldig (f.eks. mangler komma, har ekstra komma, eller ugyldig escaping), eller når den er gyldig men ikke er en array. Verktøyet forventer en array med objekter eller en array med arrays. Et enkelt objekt som {"a":1} blir likevel tolket som en array med ett objekt, så det fungerer.
6. Hva betyr «Conversion cancelled»? Du har sannsynligvis trykket på en avbryt-knapp (avhengig av nettleserimplementasjon), eller lastet inn en ny fil før konverteringen var ferdig. Prøv igjen med én fil om gangen.