Konverter XML til JSON
Omdan din XML-fil til JSON direkte i browseren. Filen forlader aldrig din maskine, og du kan se præcis hvordan attributter og gentagne elementer bliver håndteret.
Kører i din browser — filen uploades ikke
Sådan gør du
Vælg din XML-fil
Træk filen ind i værktøjet, eller vælg den fra din maskine. Filen sendes ikke til nogen server.
Konverteringen sker automatisk
Værktøjet læser strukturen og oversætter elementer, attributter og tekstindhold til JSON i browseren.
Gennemse resultatet
Tjek særligt de elementer der kan gentage sig, og de elementer der har attributter, inden du bruger output videre.
Hent eller kopiér JSON
Download filen, eller kopiér den direkte til udklipsholderen og indsæt den i din kode.
Om formaterne
XML
XML bruges ofte som output fra ældre systemer, ERP-løsninger, SOAP-baserede webservices og konfigurationsfiler, hvor struktur og datatypisering via skemaer (XSD) er vigtig. Formatet tillader attributter, navnerum og kommentarer, som ikke findes i JSON.
JSON
JSON er det format de fleste moderne REST-API'er, JavaScript-applikationer og Node-baserede backends forventer. Det er lettere at parse i de fleste sprog og fylder som regel mindre end den tilsvarende XML.
Du vinder et format der er nemmere at arbejde med i moderne kode, men du taber XML's skelnen mellem attribut og element, dets navnerum og eventuelle kommentarer. Alt bliver til tekst, tal eller boolean efter bedste gæt, og du bør selv kontrollere om typerne stemmer med det, dit system forventer.
Derfor er XML til JSON ikke bare at skifte filendelse
Situationen er typisk denne: du har fået en XML-fil fra en API, en integration eller et eksport fra et andet system, og din egen kode eller applikation forventer JSON. Problemet er at XML og JSON ikke er strukturelt ens. XML har både elementer, attributter, tekstindhold og navnerum, mens JSON kun kender til nøgler og værdier. Enhver konvertering må derfor træffe et valg om hvordan de ekstra XML-koncepter skal oversættes, og forskellige værktøjer træffer det valg forskelligt.
De to steder hvor konverteringen oftest overrasker, er attributter og gentagne elementer. Resten af denne side gennemgår begge dele konkret, så du ved hvad du skal tjekke i output, før du bygger videre på det i din kode.
Attributter bliver til nøgler med et foranstillet tegn
Tag et element som en bruger med attributterne id lig med 42 og aktiv lig med sand, og teksten Anders imellem tags. Attributterne har ingen naturlig plads i JSON, fordi JSON ikke skelner mellem attribut og element. Derfor bliver de typisk til separate nøgler med et foranstillet tegn, for eksempel @id og @aktiv, mens selve tekstindholdet lægges under en nøgle som #text. Vores værktøj bruger @ som prefix for attributter, netop så du let kan se i output hvad der oprindeligt var en attribut, og hvad der var et almindeligt element.
Hvis den kode der skal modtage JSON'en forventer andre nøglenavne end @id, skal du regne med et lille efterbehandlingstrin. Selve konverteringen giver dig den rå struktur fra XML'en, men det er dig der kender det præcise format dit system i sidste ende skal bruge.
Gentagne elementer og den klassiske fejlkilde med arrays
Den mest almindelige overraskelse opstår med elementer der kan optræde flere gange. Har XML'en to vare-elementer inde i en ordre, bliver de fint samlet til et array med to poster. Men har XML'en kun ét vare-element, fordi ordren den dag kun indeholder én vare, bliver resultatet et enkelt objekt i stedet for et array med én post. Kode der forventer et array og forsøger at bruge en array-funktion på det, fejler pludselig, selvom koden virkede fint indtil nu.
Denne fejl rammer typisk først i produktion, den dag kildedataen ændrer sig fra én til flere poster, eller omvendt. Løsningen er at kigge output igennem for de elementer der logisk set kan gentage sig, og selv sikre at de altid pakkes som array i din videre kode, uanset hvor mange poster der reelt kommer fra XML'en.
Når tekst og attributter optræder i samme element
Et element som en pris med attributten valuta lig med DKK og teksten 199 imellem tags, indeholder reelt to informationer på samme sted. Output bliver derfor ikke bare en simpel værdi, men et lille objekt med @valuta og #text som nøgler. Det kan virke unødigt kompliceret hvis du kun er interesseret i tallet 199, men det afspejler at XML rent faktisk gemte to ting der, hvor JSON kun har plads til én værdi pr. nøgle.
Har din XML egentlig blandet indhold, altså tekst og underelementer flettet sammen som i eksempelvis XHTML, bliver det endnu sværere at repræsentere i JSON uden at miste rækkefølgen. Her er JSON grundlæggende dårligt egnet i forhold til XML, og du bør ikke forvente et pænt resultat uden manuel efterbearbejdning.
Navnerum og kommentarer følger ikke med
Bruger din XML navnerum, for eksempel et prefix som soap i soap:Envelope, bevares selve prefixet ofte som en del af nøglenavnet i JSON, men den bagvedliggende navnerums-binding forsvinder. Skelner din XML mellem to elementer med samme lokale navn, men fra forskellige navnerum, kan de derfor risikere at kollidere som samme nøgle i JSON, og du bør tjekke output for det, hvis din kilde bruger flere navnerum aktivt.
XML-kommentarer og processing instructions har ikke noget tilsvarende i JSON og bliver simpelthen udeladt under konverteringen. Det er sjældent et problem, da kommentarer normalt ikke bærer egentlige data, men hvis du bruger kommentarer til at gemme metadata eller midlertidigt slå indhold fra, forsvinder de i den konverterede fil.
Når konverteringen kun er første skridt
En automatisk konvertering oversætter struktur, ikke betydning. Forventer det system der skal modtage JSON'en et helt bestemt format, for eksempel en fast nøgle som users med et array under sig, skal du ofte omdøbe nøgler og flytte data rundt efter konverteringen. XML har heller ikke nogen indbygget typeforståelse, så tal og booleans kommer ud som tekststrenge, og du må selv konvertere true og 42 fra tekst til de rigtige datatyper hvis din kode kræver det.
Til simple konfigurationsfiler eller engangsudveksling af data er den direkte konvertering som regel nok i sig selv. Skal to systemer med faste kontrakter tale sammen, er værktøjets output bedst betragtet som et første udkast, du derefter tilpasser til den præcise struktur modtagersystemet forventer.
Dine data forlader ikke maskinen
Konverteringen foregår i din browser via JavaScript, og filen sendes aldrig til en server. Det har betydning hvis din XML indeholder følsomme oplysninger, for eksempel kundedata, økonomisystemer eller interne konfigurationer, fordi ingen andre end dig selv ser indholdet undervejs. Værktøjet kræver ikke login og er gratis at bruge, uden begrænsning på antal konverteringer ud over det din egen computer og browser kan håndtere.
Ofte stillede spørgsmål
Hvad sker der med XML-attributter når jeg konverterer til JSON?
De bliver til separate nøgler med et foranstillet @, for eksempel @id, mens selve tekstindholdet i elementet placeres under en nøgle som #text. Det betyder at et element med attributter fylder mere i JSON end et rent tekstelement gør.
Hvordan ved værktøjet om et element skal blive til en liste?
Det afgøres af hvor mange gange elementet reelt optræder i din XML-fil. Optræder det kun én gang, bliver det et enkelt objekt frem for et array med én post, selv hvis elementet i princippet kunne gentage sig. Det er derfor du selv bør normalisere disse felter i din videre kode.
Forsvinder XML-kommentarer i den konverterede JSON?
Ja. JSON har ingen kommentarsyntaks, så kommentarer og processing instructions fra XML-filen udelades helt under konverteringen. Har du gemt vigtige oplysninger i kommentarer, skal de flyttes manuelt ind i selve strukturen først.
Kan jeg konvertere store XML-filer med værktøjet?
Ja, så længe din browser kan håndtere filstørrelsen. Der er ingen kunstig grænse i værktøjet, men meget store filer kan tage længere tid, fordi al behandling sker på din egen maskine.
Bliver mine data uploadet til en server?
Nej. Konverteringen sker lokalt i din browser, og filen sendes aldrig nogen steder hen. Det gør værktøjet velegnet selv til XML-filer med følsomt indhold.
Kan jeg konvertere den anden vej, fra JSON til XML?
Ja, Omdan.dk har et separat værktøj til det. Bemærk dog at en tur JSON til XML og tilbage igen sjældent giver præcis den samme struktur, da JSON ikke har noget begreb om attributter.
Hvad sker der med XML-navnerum under konverteringen?
Prefixet fra navnerummet bevares som regel i selve nøglenavnet, men den bagvedliggende binding til navnerummet går tabt. Bruger din kilde flere navnerum med samme elementnavn, kan det give kollisioner i JSON-strukturen som er værd at tjekke.
Skal jeg tænke på encoding, hvis min XML indeholder æ, ø og å?
Værktøjet håndterer UTF-8, som er det almindelige for danske tegn i moderne XML-filer. Er din fil kodet i et andet format, for eksempel Latin-1 fra et ældre system, kan tegnene se forkerte ud efter konverteringen, og du bør omkode filen til UTF-8 først.