CodeKitHub
JSON-tools

JSON ↔ XML Converter

Laatst bijgewerkt:

Bij het converteren van JSON naar XML wordt elke key een elementtag en elke waarde de bijbehorende tekstinhoud — geneste objecten worden geneste elementen, arrays worden herhaalde broer-elementen, en XML-attributen worden gemapt naar `@_name`-keys in JSON zodat de conversie in beide richtingen lossless blijft. Deze tool doet die conversie, in beide richtingen, volledig in je browser.

Wat is deze tool?

XML en JSON zijn allebei boomvormige dataformaten, maar ze komen voor op verschillende plekken: legacy enterprise-API's, SOAP-services, RSS/Atom-feeds en veel configuratieformaten gebruiken nog steeds XML, terwijl moderne REST-API's en JavaScript-code vrijwel uitsluitend JSON gebruiken. Deze tool vertaalt tussen de twee, zodat je bij het koppelen van oude en nieuwe systemen geen van beide met de hand hoeft te schrijven.

De conversie is direct gebouwd op de DOMParser API van de browser voor het lezen van XML, en volgt de structuur uit de W3C XML 1.0-specificatie voor het genereren ervan — de gegenereerde XML is dus welgevormd, en XML die je invoert wordt op dezelfde manier verwerkt als een browser of standaardconforme XML-bibliotheek dat zou doen.

Omdat XML concepten heeft die JSON niet heeft (attributen, gemengde tekst/element-inhoud, een verplicht enkel root-element) en JSON concepten heeft die XML niet heeft (native arrays, booleans, getallen), gebruikt de tool een gedocumenteerde, veelgebruikte conventie: een XML-attribuut `name="value"` wordt de JSON-key `"@_name": "value"`, tekstinhoud van een element wordt óf de directe stringwaarde van het element (als het geen kinderen of attributen heeft) óf een `"#text"`-key naast eventuele attributen, en herhaalde broer-elementen met dezelfde tag worden een JSON-array.

Waarom gebruiken?

  • Tweerichtingsverkeer — converteer JSON naar XML of XML naar JSON vanaf hetzelfde scherm.
  • Verwerkt nesting correct — geneste JSON-objecten worden geneste XML-elementen en omgekeerd, op elke diepte.
  • Arrays worden gemapt naar herhaalde elementen — een JSON-array onder een key wordt evenveel broer-XML-elementen met dezelfde tag, en herhaalde XML-tags komen terug als een JSON-array.
  • XML-attributen blijven bewaard — via de `@_attributeName`-conventie, zodat attribuutdata niet stilletjes verdwijnt.
  • Kopieer naar klembord of download als .json- of .xml-bestand.
  • 100% client-side — niets wat je plakt wordt ergens geüpload.

Hoe te gebruiken

  1. Kies een richting: "XML → JSON" of "JSON → XML".
  2. Plak je data in het invoervak.
  3. Klik op "Convert".
  4. Bekijk het resultaat en kopieer het of klik op "Download" om een bestand op te slaan.

Voorbeeld

Invoer

{"user":{"name":"Alice","age":30}}

Uitvoer

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name>Alice</name>
  <age>30</age>
</user>

De enige JSON-key op het hoogste niveau ("user") wordt het XML root-element; als de JSON meer dan één top-level key heeft, verpakt de tool alles in een <root>-element omdat XML precies één root vereist.

Praktische tips

  • Een legacy XML-configuratie (zoals het instellingenbestand van een oude app) migreren naar een modern JSON-gebaseerd systeem: plak de XML, converteer en pas veldnamen aan waar nodig.
  • Een SOAP- of XML-RPC-endpoint testen vanuit JavaScript: converteer je JSON-requestpayload hier naar XML voordat je die verstuurt, of converteer een XML-response terug naar JSON om hem makkelijk te inspecteren.
  • Als je JSON arrays gebruikt voor data die XML als herhaalde elementen zou weergeven, zorg er dan voor dat de array eerst onder één enkele key genest is (bijv. {"items":{"item":[1,2,3]}}) in plaats van een kale top-level array, omdat XML geen meerdere root-elementen kan hebben.

Waarom de @_ attribuutconventie belangrijk is

Het lastigste onderdeel van JSON/XML-conversie is dat XML-elementen tegelijk twee soorten data kunnen dragen — attributen en kindinhoud — terwijl een gewoon JSON-object alleen keys en waarden heeft. Zonder een conventie om die twee gescheiden te houden, zou een naïeve converter attributen volledig kwijtraken of ze op een manier vermengen met kind-elementen die niet betrouwbaar terug te converteren is. De `@_name`-prefixconventie (ook gebruikt door veelgebruikte bibliotheken in het JavaScript-ecosysteem) lost dit op door attributen een aparte, ondubbelzinnige key-vorm te geven, zodat `<product id="42">Widget</product>` netjes heen en terug wordt geconverteerd als `{"product":{"@_id":"42","#text":"Widget"}}` in plaats van dat de id verloren gaat of er verkeerd geraden wordt welke waarde bij wat hoort.

Veelgestelde vragen

Wat gebeurt er met JSON met meer dan één top-level key?

XML vereist één root-element, dus als je JSON-object meerdere top-level keys heeft (bijv. {"a":1,"b":2}), wordt de uitvoer verpakt in een <root>-element: <root><a>1</a><b>2</b></root>. Als je JSON precies één top-level key heeft, wordt die key direct de naam van het root-element.

Hoe worden XML-attributen weergegeven in JSON?

Een attribuut zoals <user id="7"> wordt de key "@_id": "7" in het resulterende JSON-object. Dit is een gangbare, gedocumenteerde conventie (gebruikt door bibliotheken zoals fast-xml-parser) die attributen onderscheidbaar houdt van kind-elementen.

Worden herhaalde XML-elementen een JSON-array?

Ja. Als een element meerdere kinderen met dezelfde tagnaam heeft, bijv. <items><item>1</item><item>2</item></items>, levert conversie naar JSON {"items":{"item":["1","2"]}} op. Die JSON terug converteren naar XML reproduceert de herhaalde <item>-elementen.

Blijven getallen en booleans behouden bij conversie van XML naar JSON?

XML heeft geen native concept van getallen of booleans — alles is tekst — dus tekstinhoud komt door als een JSON-string (bijv. "30" in plaats van 30). Als je numerieke types nodig hebt, moet je die velden achteraf zelf converteren.

Wordt mijn data ergens geüpload?

Nee. Parsen en converteren gebeuren volledig in JavaScript in je browser, met de ingebouwde DOMParser API — er wordt niets naar een server gestuurd, dus het is veilig te gebruiken met privéconfiguratiebestanden of interne API-payloads.

Gerelateerde tools