JSON naar XML omzetten

Hier zet je JSON naar XML om, gratis en zonder account: sleep het bestand hierboven erin en binnen een paar seconden staat het resultaat klaar om te downloaden. De omzetting gebeurt binnen je eigen browser, dus het bestand wordt nooit geüpload. Het werkt hetzelfde op Windows, macOS en Linux als op iPhone en Android, en het blijft werken als je de verbinding verbreekt.

  • Waar het draait In je browser. Het bestand wordt nooit geüpload.
  • Zonder verlies Er gaat niets weg. XML bewaart precies wat JSON bewaarde.
  • Maximale grootte Tot 100 MB per bestand, gratis en zonder account.

Tot 100 bestanden tegelijk. Verschillende formaten door elkaar is prima.

XML wil precies één root, en JSON noemt er niet altijd één

Een XML-document heeft één buitenste element. Een JSON-document kan een object met vijftien sleutels zijn, of een array, of een kaal getal, en geen daarvan heeft een naam voor de container. De omzetting hanteert dus een regel: een object met precies één sleutel gebruikt die sleutel als root; al het andere wordt in een element genaamd root gewikkeld. De uitzondering: houdt die ene sleutel een array in, {"items": [1, 2]}, dan zou die sleutel als root tweemaal <items> schrijven — daarom komt <root> om het paar heen.

Het eerste geval is waar je naartoe wilt werken, en het is een kleine aanpassing aan de JSON als je de bron beheert. Je payload in één sleutel wikkelen die benoemt wat het is — factuur, bestelling, zending — betekent dat de XML met de elementnaam komt die het ontvangende systeem verwacht.

Een JSON-array wordt hetzelfde XML-element herhaald

XML heeft geen array-type en had er ook nooit een nodig: een lijst is dezelfde tag meerdere keren in dezelfde ouder geschreven. Een object met drie tags levert dus drie <tags>-elementen achter elkaar op — precies de vorm die elke XML-consument al aankan.

Dit is de ene plek waar XML beter bij JSON past dan de tabelformaten. Dezelfde array naar CSV omzetten dwingt een keuze tussen extra kolommen, een samengevoegde string en extra rijen. In XML is de herhaling native, dus een bestelling met vijf orderregels zet zonder enige beslissing om.

Attributen bestaan, en het @-voorvoegsel vraagt erom

XML heeft twee manieren om een waarde aan een element te hangen — een attribuut in de tag of een kindelement — en schema’s vinden dat verschil belangrijk. JSON kent er maar één. De conventie hier overbrugt dat: een sleutel die met @ begint, wordt als attribuut geschreven, en een sleutel #text levert de eigen tekst van het element.

Die conventie is niet willekeurig; het is wat de XML-lezer van deze site in de andere richting produceert. Een document omgezet naar JSON, bewerkt en teruggezet, geeft de attributen terug als attributen. Verwacht de ontvanger id als attribuut en heeft je JSON het als gewone sleutel, dan is die sleutel hernoemen naar @id de hele oplossing.

Elementnamen worden herschreven waar JSON toestaat wat XML niet toestaat

JSON-sleutels kunnen elke string zijn: spaties, schuine strepen, emoji, een leidend cijfer. XML-elementnamen niet. De schrijver herschrijft in plaats van te falen, en doet dat tegen een bewust smalle lijst — A-Z, a-z, 0-9, underscore, punt en koppelteken blijven staan, de rest wordt een underscore, en een naam die met een cijfer begint krijgt er één voor. «2024 report» wordt dus <_2024_report>.

Die lijst is smaller dan die van XML 1.0 zelf, en dat is het geval dat je het snelst te pakken krijgt: XML-elementnamen mogen letters met accenten, Grieks, Cyrillisch en CJK bevatten, en deze schrijver behoudt er geen enkele van. Een sleutel café komt aan als <caf_>. Hernoem die sleutels in de JSON, of herstructureer zodat het variabele deel een waarde wordt in plaats van een sleutel.

Naamruimten, schema’s en alles wat XML heeft dat JSON mist

XML brengt naamruimten, XSD-schema’s, DTD’s, verwerkingsinstructies, CDATA-secties en digitale handtekeningen — het register noemt handtekeningondersteuning als een van de eigenschappen, en dat is de reden dat het formaat nog altijd de ruggengraat is van bankieren en overheidsuitwisseling. Niets daarvan is uit een JSON-bestand af te leiden.

In de praktijk: de uitvoer is welgevormd, niet gevalideerd. Valideert de ontvangende kant tegen een XSD, verwacht dan een naamruimtedeclaratie op het root-element toe te moeten voegen en mogelijk elementen te herordenen, want XSD-volgorde is gevoelig en JSON-objectvolgorde niet betekenisvol.

Escapen, null-waarden en de tekens die het document zouden breken

Ampersands, punthaken en dubbele aanhalingstekens in een waarde worden bij het schrijven ontsnapt, wat voorkomt dat een productomschrijving met «Tom & Jerry <special>» het document voortijdig beëindigt. Al het andere, inclusief apostrofs en elk niet-ASCII-teken, wordt als UTF-8 doorgeschreven.

Een JSON null wordt een leeg element: de tag staat er, zonder iets tussen opening en sluiting. Dat is een bewuste keuze — XML kent ook xsi:nil voor precies dit geval, en sommige schema’s eisen dat. Is dat bij jou zo, dan is de vervanging een zoek-en-vervang op de lege elementen.

De uitvoer is ingesprongen, en er wordt geen XML-declaratie geschreven

Het document is geschreven met inspringing van twee spaties en één element per regel, wat het leesbaar maakt en een diff tussen twee payloads te volgen. Het begint niet met de regel <?xml version="1.0"?>. XML 1.0 maakt die declaratie optioneel en definieert UTF-8 als standaardcodering.

Sommige oudere ontvangende systemen zijn het daarmee oneens en falen met een onduidelijke melding als de regel ontbreekt. Het is één regel om bovenaan toe te voegen — de moeite van weten waard vóór de eerste indiening.

Grootte: XML kost meer bytes dan de JSON deed

Elke waarde wordt in een openings- en sluitingstag gewikkeld, dus veldnamen verschijnen twee keer per record in plaats van één keer. Bij kleine waarden met lange veldnamen kan het document twee tot drie keer de grootte van de JSON zijn, en de inspringing telt daar nog bij op.

Dat is een echte kostenpost op een wachtrij met een berichtgrootte-limiet en geen kostenpost op een bestandsoverdracht, waar de meeste van deze leveringen naartoe gaan. Telt het wel, dan is compressie het antwoord: XML is zeer repetitieve tekst en comprimeert uitstekend met gzip.

Valideer de XML voordat je hem ergens naartoe stuurt

Twee controles, in volgorde. Welgevormdheid eerst: elke XML-editor, browser of commandoregel-parser vertelt binnen een seconde of het document ontleedbaar is, en dat zou hier altijd moeten kloppen.

Validatie tegen het schema daarna, en verwacht dat die de eerste keer faalt. De fouten zijn informatief — een ontbrekende naamruimte, een element in de verkeerde volgorde — en elk is een kleine aanpassing in de JSON of in de uitvoer.

De payload blijft in de browser tijdens de stap JSON naar XML

De omzetting is JavaScript in dit tabblad: de browser ontleedt de JSON, een kleine schrijver produceert de XML, en geen verzoek draagt het document ergens naartoe. Geen aanmelding, geen wachtrij, geen daglimiet, en het gratis niveau accepteert tot 100 MB.

Voor dit publiek is dat vaak de doorslag in plaats van een leuk extraatje. De payloads die XML moeten worden zijn betalingen, claims, aangiften en patiënt- of klantgegevens — precies de categorieën waarbij een bestand naar een onbekende webdienst plakken een meldingsplichtig incident is.

Zo zet je JSON naar XML om

  1. Sleep je JSON-bestand op deze pagina, of klik om er een te kiezen.
  2. Kies XML als doel. De omzetting gebeurt in je browser en het bestand wordt niet geüpload.
  3. Download het klare XML-bestand.

JSON of XML: wat er verandert

JSON vergeleken met XML
JSONXML
Volledige naamJavaScript Object NotationExtensible Markup Language
Bestandsextensie.json.xml
Mediatypeapplication/jsonapplication/xml
Voor het eerst gepubliceerd20011998
Uitgegeven doorW3C
SpecificatieRFC 8259XML 1.0
LicentieOpen standaardOpen standaard
Stand van zakenActueelActueel
Opent in een browserElke browserElke browser
In plaats daarvan overwogenYAML, NDJSONYAML

Wat behouden blijft

Er gaat niets verloren. JSON en XML bewaren hun inhoud verliesvrij: de omzetting wisselt de verpakking, niet de kwaliteit, en je kunt haar herhalen zonder dat schade zich opstapelt.

Het resultaat openen

Visual Studio Code leest zowel JSON als XML, dus je kunt het resultaat naast het origineel leggen zonder een tweede programma.

Waarvoor elk formaat bedoeld is

JSON verscheen in 2001. Het is vastgelegd in RFC 8259, en dat is de moeite waard als het bestand het gereedschap moet overleven dat het schreef.

XML komt van W3C en stamt uit 1998, vastgelegd in XML 1.0. Visual Studio Code en oXygen XML Editor lezen het formaat.

Van JSON naar XML: veelgestelde vragen

Wordt mijn JSON-bestand ergens heen geüpload?

Nee. Deze omzetting gebeurt volledig in je browser, dus het bestand verlaat je apparaat niet. Je kunt het zelf nagaan: open het netwerktabblad van de ontwikkelaarshulpmiddelen en zet iets om. Je ziet de pagina zelf en de verzoeken voor statistiek en advertenties waarmee deze dienst betaald wordt, en geen enkel verzoek dat je bestand meeneemt.

Is JSON naar XML omzetten gratis?

Ja. Geen account, geen watermerk en geen dagtegoed dat opraakt: het draait op je eigen machine, dus je mag zo vaak terugkomen als je wilt. De browser verwerkt bestanden tot 100 MB, 100 tegelijk.

Gaat er kwaliteit verloren bij het omzetten van JSON naar XML?

Nee. XML bewaart dezelfde inhoud zonder iets weg te gooien: het resultaat is in kwaliteit identiek aan het origineel.

Is JSON naar XML verliesvrij?

Er gaat niets verloren. JSON en XML bewaren hun inhoud verliesvrij: de omzetting wisselt de verpakking, niet de kwaliteit, en je kunt haar herhalen zonder dat schade zich opstapelt.

Weet je niet welke je nodig hebt?

Deze pagina zet het een in het ander om. Gaat je vraag over kiezen en niet over omzetten, dan zegt JSON vs XML welke je moet gebruiken, waarvoor, en waar elk van beide zwak is.

Meer over deze formaten