XML to JSON Converter
Free browser-based XML to JSON converter — no sign-up, no upload required. Maps XML attributes to @keys, nests elements, and turns repeated tags into arrays, entirely client-side.
Aktualisiert am
Häufig gestellte Fragen
How is an element that has both an attribute and text content converted, like <price currency="USD">19.99</price>?
The attribute forces the element to become a JSON object rather than a plain string, since a plain string value has nowhere to hang the attribute. The text content moves to a #text key alongside the attribute key: {"price": {"@currency": "USD", "#text": "19.99"}}. If the element had no attributes, the same tag would have simplified to a plain string value instead.
What happens to an empty element like <note/> or <note></note>?
Per the XML 1.0 spec, a self-closing tag and an explicitly-closed empty tag are equivalent — there's no way to distinguish them once parsed, so both convert identically. With no attributes and no text or child content, there's nothing to populate the JSON value with, so this typically comes through as an empty string or null rather than an empty object, since there are no attribute or child keys to place inside one.
Are XML comments and processing instructions kept in the JSON output?
No. JSON's grammar (RFC 8259 / ECMA-404) has no comment syntax and no node type analogous to a processing instruction (<?xml-stylesheet type="text/xsl" href="style.xsl"?>), so both are stripped during conversion. Only element structure, attributes, and character data survive the conversion; anything that isn't data in the XML infoset sense is discarded.
Why might converting XML to JSON and back produce a file with different whitespace or attribute order than the original?
Two separate spec gaps compound here. First, XML often contains whitespace-only text nodes between elements purely for pretty-printing indentation, which can surface as stray #text entries unless explicitly stripped. Second, the JSON grammar (ECMA-404) never mandates that object members preserve insertion order — most parsers do in practice, but it isn't a spec guarantee — so attribute order captured as @keys isn't reliably round-trippable either.
Wenn ich <id>007</id> in JSON umwandle, wird daraus die Zahl 7 oder bleibt es der String "007"?
Das ist eine inhärente Mehrdeutigkeit, kein Fehler eines bestimmten Tools. XML kennt keinen nativen Zahlen- oder Boolean-Typ – laut XML-1.0-Spezifikation ist der Inhalt jedes Elements Zeichendaten –, sodass eine XML-zu-JSON-Umwandlung immer eine Entscheidung treffen muss, wann Text zu einer JSON-Zahl bzw. einem Boolean werden soll und wann er ein String bleibt. Diese Entscheidung ist bei Werten wie "007" (eine Postleitzahl oder ein Produktcode, keine 7) oder "1.50" (ein Preis, bei dem eine Umwandlung in eine Zahl die abschließende Null stillschweigend als 1,5 verschluckt) tatsächlich gefährlich. Der sichere Standard, für den sich die meisten Umwandlungen entscheiden, ist, alle Element- und Attributwerte als JSON-Strings zu belassen und dem konsumierenden Code zu überlassen, wann und wie er umwandelt – so geht keine Information stillschweigend verloren.
Warum wandeln Entwickler XML-API-Antworten in JSON um, statt das XML direkt in JavaScript zu parsen?
Browser und Node.js haben kein integriertes Äquivalent zu JSON.parse für XML – man bräuchte DOMParser (nur im Browser) oder eine XML-Bibliothek (Node) und müsste anschließend selbst Traversierungscode schreiben, um Werte über getElementsByTagName oder XPath aus dem DOM-Baum zu holen. JSON.parse hingegen ist ein einziger eingebauter Aufruf, der einem sofort verwendbare Objekte und Arrays liefert, die man direkt destrukturieren kann. Genau diese Lücke erklärt, warum Legacy-SOAP-APIs, RSS-/Atom-Feeds und sitemap.xml-Dateien so häufig am Rand einer JavaScript-Codebasis in JSON umgewandelt werden: Es liegt nicht daran, dass JSON leistungsfähiger wäre, sondern daran, dass das JS-Tooling zum Konsumieren davon bereits vorhanden ist.
Was kam zuerst, XML oder JSON, und wie erklärt diese Geschichte ihre gestalterischen Unterschiede?
XML ist etwa ein Jahrzehnt älter als JSON: XML 1.0 wurde im Februar 1998 zur W3C-Empfehlung, abgeleitet von SGML und als Dokument-Markup-Sprache konzipiert (daher Attribute, gemischter Inhalt und Namensräume). JSON wurde Anfang der 2000er-Jahre von Douglas Crockford aus der Objektliteral-Syntax von JavaScript extrahiert, zunächst 2006 formal als RFC 4627 spezifiziert, dann als ECMA-404 (2013) neu spezifiziert und liegt heute als RFC 8259 (2017) vor. JSONs Minimalismus – vier Datentypen, keine Attribute, kein gemischter Inhalt – spiegelt seinen Ursprung als Übertragungsformat zum Austausch von Datenstrukturen mit einem laufenden Programm wider, nicht zur Auszeichnung von Dokumenten.
Stimmt es, dass JSON im Grunde XML mit leichterer Syntax ist?
Nein – und die @-Präfix-Konvention, die dieses Tool für Attribute verwendet, ist selbst ein Beleg für diese Lücke. Diese Konvention (@key für Attribute, #text für gemischten Inhalt) ist nicht Teil der JSON-Spezifikation; sie ist eine weit verbreitete, aber informelle Konvention, und verschiedene XML-zu-JSON-Tools behandeln dieselbe Eingabe unterschiedlich – manche flachen Attribute zu einfachen Schlüsseln ab, manche verpacken Elementinhalte in einen $- oder _text-Schlüssel, manche nutzen die BadgerFish- oder Parker-Konventionen. JSON kennt von Haus aus überhaupt kein Attributkonzept, sodass jedes XML-zu-JSON-Tool seine eigene Konvention über reine JSON-Objekte legt – und die JSON-Ausgabe eines Konverters muss nicht mit der eines anderen für dieselbe XML-Eingabe übereinstimmen.
Was passiert, wenn zwei Elemente aus unterschiedlichen XML-Namensräumen zufällig gleich benannt sind, wie <a:id> und <b:id>?
Da dieser Konverter Namensraum-Präfixe wörtlich als Teil des Schlüsselnamens beibehält, statt sie zur vollständigen Namensraum-URI aufzulösen, werden "a:id" und "b:id" zu zwei unterschiedlichen JSON-Schlüsseln und kollidieren nicht – aber nur solange sich die Präfixe selbst unterscheiden. Verwenden zwei verschiedene Teile eines Dokuments zufällig dasselbe Präfix für unterschiedliche Namensraum-URIs (in XML zulässig, da Präfixbindungen auf das Element beschränkt sind, in dem sie deklariert werden), oder parst ein nachgelagertes Tool das JSON ohne Namensraumkontext neu, identifiziert dieser präfixbasierte Schlüssel nicht mehr zuverlässig, zu welchem Namensraum das Element ursprünglich gehörte. Bei Dokumenten, in denen Namensraum-URIs wichtiger sind als Präfixe, ist es sicherer, Präfixe vor der Umwandlung zu normalisieren.
Embed This Tool
Add a free, live version of this widget to your own website or blog post — it runs entirely in your visitors' browsers, with a credit link back to The Toolbox.
<iframe src="https://getthetoolbox.com/embed/xml-to-json" title="XML to JSON Converter — The Toolbox" width="100%" height="420" style="max-width:480px;border:1px solid #e2e8f0;border-radius:12px" loading="lazy"></iframe>
<p style="font-size:12px;margin:4px 0 0"><a href="https://getthetoolbox.com/converter-tools/xml-to-json?utm_source=embed&utm_medium=widget" target="_blank" rel="noopener">Free XML to JSON Converter</a> by The Toolbox</p>Verwandte Tools
Kostenloser Längenumrechner online
Rechnen Sie zwischen Metern, Fuß, Zoll, Meilen und weiteren Längeneinheiten um. Kostenlos, schnell und vollständig im Browser, ohne Anmeldung.
Kostenloser Gewichtsumrechner online
Rechnen Sie zwischen kg, Pfund, Unzen, Gramm und weiteren Gewichtseinheiten um. Kostenlos, schnell und vollständig im Browser, ohne Anmeldung.
Kostenloser Temperaturumrechner
Rechnen Sie Temperaturen sofort zwischen Celsius, Fahrenheit und Kelvin um. Kostenlos, schnell und vollständig im Browser, ohne Anmeldung.
Kostenloser Flächenumrechner online
Rechnen Sie zwischen Quadratmetern, Acres, Hektar und mehr um. Kostenlos, schnell und vollständig im Browser, ohne Anmeldung.
Über den XML-zu-JSON-Konverter
XML (das W3C-Standardformat Extensible Markup Language, erstmals 1998 veröffentlicht, mittlerweile in der 5. Ausgabe der 1.0-Spezifikation) und JSON (formalisiert als ECMA-404 und RFC 8259) lösen dasselbe Problem – den strukturierten, hierarchischen Datenaustausch – aber mit grundlegend unterschiedlichen Datenmodellen. XML ist im Kern ein Dokumentformat: Jeder Knoten ist ein Element, das Attribute, geordnete Kindelemente und freien Text tragen kann, alles miteinander verschachtelt. JSON ist ein Datenformat, das aus vier Strukturen besteht – Objekt, Array, String/Zahl/Boolean und Null –, ohne jedes Konzept eines Attributs oder von Text neben Kindknoten. Eine Umwandlung zwischen beiden bedeutet, das eine Modell auf das andere abzubilden, und einige XML-Eigenschaften haben schlicht keine JSON-Entsprechung.
Attribute. XML-Attribute stehen im öffnenden Tag eines Elements: <person id="1" active="true">. Da JSON-Objekte kein Attributkonzept kennen, bildet dieses Tool jedes Attribut auf einen gleichrangigen Schlüssel mit dem Präfix @ ab:
<person id="1"><name>Ada Lovelace</name></person>
{ "person": { "@id": "1", "name": "Ada Lovelace" } }
Wiederholte vs. einzelne Elemente. Dies ist die klassische Mehrdeutigkeit bei der XML-zu-JSON-Umwandlung. Enthält ein <skills>-Element drei <skill>-Kindelemente, werden diese zu einem JSON-Array ("skill": ["Math", "Programming", "History"]). Enthält es jedoch nur ein einziges <skill>, hat der Konverter kein Schema, das er konsultieren könnte, und kann nicht wissen, ob dieses Element grundsätzlich einzeln vorkommt oder nur zufällig gerade einmal auftritt – daher gibt er einen einfachen String bzw. ein Objekt statt eines einelementigen Arrays aus. Das bedeutet, dass sich die Form der JSON-Ausgabe je nach Häufigkeit eines Geschwister-Tags in einem bestimmten Dokument ändern kann – relevant, wenn Code gegen die konvertierte Ausgabe geschrieben wird und ein konsistenter Array-Typ erwartet wird.
Gemischter Inhalt. XML erlaubt, dass sich Text und Elemente innerhalb desselben Elternelements abwechseln – <p>Hello <b>world</b>!</p> –, etwas, das JSON-Objekte nicht direkt abbilden können, da Objektwerte entweder ein einzelner String oder eine verschachtelte Struktur sind, nicht eine geordnete Mischung aus beidem. Dieses Tool bildet die Textanteile auf einen #text-Schlüssel neben den Schlüsseln der Kindelemente ab. Das ist eine vernünftige Annäherung, aber verlustbehaftet: Da JSON-Schlüssel/Wert-Paare gemäß Objektmodell ungeordnet sind, bleibt die Verschachtelungsposition des Texts relativ zu den Kindelementen (Text vor <b> versus danach) nicht vollständig erhalten – man erhält die Einzelteile, nicht ihr ursprüngliches Geflecht.
Was sich nicht sauber abbilden lässt. XML-Namensräume (xmlns:soap="...") und Verarbeitungsanweisungen (<?xml-stylesheet ...?>) haben keine native JSON-Repräsentation, die dieser Konverter modelliert. Tags mit Namensraum-Präfix kommen als wörtliche Schlüssel durch (z. B. "soap:Envelope"), aber die Bindung von Präfix zu URI selbst wird nicht separat erfasst, und Verarbeitungsanweisungen werden vollständig verworfen, da JSON keinen entsprechenden Knotentyp kennt. XMLs DOCTYPE-/DTD-Deklarationen und Entity-Referenzen (&,  ) werden ebenso aufgelöst – man erhält die aufgelösten Zeichendaten, nicht das ursprüngliche Markup.
Entwickler greifen am häufigsten zu dieser Umwandlung, wenn sie Legacy-SOAP/XML-APIs von JavaScript-Frontends aus konsumieren, XML-Konfigurationsformate in JSON-basiertes Tooling migrieren oder XML-Feeds (RSS, Sitemaps, SAML-Antworten) für eine JSON-native Pipeline normalisieren. Da die oben genannten Attribut-vs-Array-Mehrdeutigkeiten bedeuten, dass ein Round-Trip nicht immer verlustfrei ist, sollte man dies als Einbahnstraßen-Transformation für den Konsum betrachten – nicht als Garantie, dass eine Rückumwandlung nach XML das Original byte-genau reproduziert.