XML in JSON umwandeln

XML kannst du hier kostenlos und ohne Konto in JSON umwandeln: Datei oben ablegen, und ein, zwei Sekunden später steht das Ergebnis zum Herunterladen bereit. Die Umwandlung läuft in deinem eigenen Browser, die Datei wird also nie hochgeladen — das klappt unter Windows, macOS und Linux ebenso wie auf iPhone und Android, und es funktioniert selbst dann noch, wenn du das Netz abschaltest.

  • Wo es läuft In deinem Browser. Die Datei wird nicht hochgeladen.
  • Neu aufgebaut JSON funktioniert anders als XML. Es ist also nicht der schleichende Qualitätsverlust eines verlustbehafteten Codecs: Was JSON ausdrücken kann, wird originalgetreu wiedergegeben — was dort keine Entsprechung hat, bleibt ganz weg.
  • Größenbegrenzung Bis 100 MB pro Datei, kostenlos und ohne Konto.
  • Gut zu wissen XML-Attribute und Textknoten werden beide zu Schlüsseln — eine Ermessensfrage, die der Konverter für dich entscheidet.

Bis zu 100 Dateien auf einmal. Gemischte Formate sind kein Problem.

Wenn eine Behördenschnittstelle nur SOAP-XML spricht

Ein großer Teil der deutschen Verwaltungs-Schnittstellen kommuniziert bis heute über SOAP und XML nach den XÖV-Standards — XJustiz, XPersonenstand und verwandte Formate —, und auch das ELSTER-Verfahren der Finanzverwaltung stammt technisch aus dieser Generation. Wer eine eigene Anwendung dagegen schreibt, ein internes Tool, eine Schnittstelle zu einem Fachverfahren, bekommt Antworten in genau diesem XML zurück und muss sie im eigenen Code lesen.

Moderne Werkzeuge und Frontends erwarten dagegen JSON. Diese Seite übersetzt zwischen beiden Welten nach einer festen, nachvollziehbaren Regel — nicht durch Raten, sondern durch dieselbe mechanische Umwandlung bei jeder Datei.

Die Regel: @ für Attribute, #text für Inhalt

XML trägt Information an drei Stellen — Elementnamen, Attribute und Text —, JSON kennt nur Schlüssel und Werte, also braucht die Abbildung eine Konvention. Jedes Element wird zu einem Schlüssel, dessen Wert ein Objekt seiner Kindelemente ist, jedes Attribut wird zu einem Schlüssel auf demselben Objekt mit vorangestelltem @, und der eigene Text eines Elements, sofern es daneben Kinder oder Attribute trägt, landet unter dem Schlüssel #text.

Ein Element ohne Attribute und ohne Kinder wird dagegen einfach zu einer Zeichenkette, ohne umgebendes Objekt. Diese Unregelmäßigkeit lässt sich nicht auflösen und sollte früh verinnerlicht werden — derselbe Pfad im Dokument liefert je nach Fall mal eine Zeichenkette, mal ein Objekt, abhängig davon, ob das Quellelement zufällig ein Attribut trug.

Ein Eintrag oder viele — die JSON-Struktur folgt den Daten

Das ist der teuerste Punkt beim Verarbeiten umgewandelter XML-Antworten. Ein XML-Dokument sagt nirgends, welche Elemente sich wiederholen können — das steht nur in einem Schema, und der Parser liest keins. Eine Antwort mit einem einzelnen Datensatz-Element erzeugt also ein Objekt, eine mit zwei erzeugt ein Array von Objekten.

Code, der gegen eine vollständige Antwortliste geschrieben wurde, bricht deshalb genau an dem Tag, an dem nur ein Datensatz zurückkommt, und Code für eine Einzelantwort bricht, sobald ausnahmsweise zwei kommen. Es gibt hier keine Einstellung, die das behebt, weil dafür das Schema bekannt sein müsste. Der Konsument sollte jede mögliche Liste als Erstes in ein Array zwingen, bevor irgendeine andere Logik darauf zugreift.

Namensraum-Präfixe bleiben im Schlüsselnamen stecken

Eine SOAP-Hülle kommt mit ihren Präfixen unverändert an: soap:Envelope wird zu einem Schlüssel, der wörtlich soap:Envelope heißt, und die Namensraum-Deklaration erscheint als Attribut wie @xmlns:soap. Nichts davon wird aufgelöst oder entfernt.

Das ist getreu und zerbrechlich zugleich, weil ein Präfix willkürlich ist. Ein Dienst, der in der einen Woche soapenv:Envelope schreibt und in der nächsten soap:Envelope, hat zwei gleichwertige Dokumente erzeugt, aber zwei unterschiedliche JSON-Strukturen. Wer den Konsumenten selbst schreibt, sollte auf den lokalen Namen nach dem Doppelpunkt prüfen und niemals ein Präfix fest verdrahten, das man nicht selbst festgelegt hat.

Die XML-Deklaration wird zu einem Schlüssel namens ?xml

Öffnet ein Dokument mit einer Versions- und Kodierungsangabe, entsteht ein oberster Schlüssel namens ?xml mit diesen Werten, direkt neben dem Schlüssel für das Wurzelelement. Das gehört nicht zum eigentlichen Inhalt und steht trotzdem in der JSON-Datei.

Der richtige Umgang damit ist, ihn zu ignorieren oder zu löschen — keinesfalls sollte Code davon ausgehen, dass der erste Schlüssel des Objekts automatisch das Wurzelelement ist. Genau das schlägt bei jedem Dokument fehl, das eine Deklaration trägt, und das sind die meisten.

Attribut- und Elementwerte werden interpretiert, nicht kopiert

Zahlenartig aussehende Werte werden zu JSON-Zahlen, in Attributen wie in Elementtext gleichermaßen. Ein Attribut mit dem Wert 1.0 wird zu 1, eine Kennung mit führenden Nullen wie 007 wird zu 7.

Das ist bei Zählwerten praktisch und bei allem, was als reine Zeichenkette gemeint war, ein Problem: Aktenzeichen, Vorgangsnummern und Steueridentifikationsmerkmale können auf diese Weise ihre führenden Nullen verlieren. Ein Wert, der zu groß für eine sichere JSON-Zahl ist, bleibt allerdings als Zeichenkette erhalten und wird nicht gerundet — das ist die eine Stelle, an der die Umwandlung von sich aus vorsichtig ist.

Kommentare und CDATA verschwinden unterschiedlich

Kommentare fallen beim Einlesen restlos weg. CDATA-Abschnitte werden dagegen ausgepackt: Der Inhalt wird zu einer gewöhnlichen Zeichenkette, sodass ein HTML-Fragment, das eine Behördenschnittstelle in CDATA einbettet, als Text mit spitzen Klammern ankommt — beim Zurückwandeln nach XML würde daraus wieder Text und keine CDATA-Sektion.

Gemischter Inhalt ist der Fall ohne gute Lösung. Ein Element aus Text, dann einem Kindelement, dann weiterem Text behält das Kind unter seinem eigenen Schlüssel und fügt die beiden Textstücke zu einem einzigen #text-Wert zusammen, ohne Markierung, wo das Kind ursprünglich stand. Jedes Dokument, in dem Fließtext und Markup ineinandergreifen, verliert an dieser Stelle seine Reihenfolge, und JSON ist für diesen Fall schlicht das falsche Ziel.

Eine SOAP-Antwort lesen, sobald sie JSON ist

Zusammengesetzt liest sich eine SOAP-Antwort als verschachtelte Schlüssel: der Envelope-Schlüssel, darin der Body-Schlüssel, darin die Operation, darin die eigentlichen Nutzdaten. Jede Ebene behält ihr Präfix, und bis die interessanten Daten auftauchen, liegen bereits drei oder vier Objektebenen dazwischen — genauso ausführlich wie das XML, aber leichter aus Code heraus zu durchlaufen.

Eine Fehlerantwort sollte als Erstes getestet werden. SOAP-Fehler nutzen eine andere Elementstruktur als eine erfolgreiche Antwort, sodass die JSON-Struktur eines Fehlers nichts mit der eines Ergebnisses gemein hat, und ein Client, der nur den Erfolgsfall kennt, liest von einem nicht mehr existierenden Pfad undefined. Am besten eine echte Fehlerantwort einmal umwandeln und den Fehlerzweig genau darauf schreiben, bevor er gebraucht wird.

Leere Elemente und der Wert, der zur leeren Zeichenkette wird

Ein selbstschließendes Element und ein Element mit leerem Inhalt werden beide zu einer leeren Zeichenkette. XML unterscheidet zwischen beiden ebenfalls nicht, insofern geht dabei nichts verloren — nur dass JSON eigentlich null kennt und es hier nicht verwendet wird: Ein leeres Element wird zu "" und nicht zu null.

Was tatsächlich verschwindet, ist der Unterschied zwischen einem Feld, das im Dokument gar nicht vorkam, und einem, das vorkam und explizit leer war, sobald der eigene Code einen Standardwert einsetzt. Beide wirken danach gleich falsch. Wo dieser Unterschied wichtig ist — ein Feld, das bewusst geleert wurde, gegenüber einem, das nie gesetzt war — hilft nur, auf das Vorhandensein des Schlüssels zu prüfen statt auf seinen Wert.

Gegen eine Struktur programmieren, die sich ändern kann

Die Ausgabe ist mit zwei Leerzeichen eingerückt, lässt sich also gut in einem Code-Review lesen und direkt als Testfixture einfügen. Genau dafür lohnt sie sich am meisten: eine echte Antwort einmal umzuwandeln und ins Repository aufzunehmen, gibt dem eigenen Code etwas Ehrliches zum Testen, samt aller oben beschriebenen Eigenheiten.

Drei Gewohnheiten decken fast jedes Problem dieser Seite ab. Alles, was sich wiederholen kann, in ein Array normalisieren. Kennungen als Zeichenketten vergleichen, und sie an der Systemgrenze zurück in Zeichenketten wandeln, falls der Parser sie zu Zahlen gemacht hat. Namensraum-Schlüssel am lokalen Namensteil erkennen, nicht am vollständigen Präfix. Mit diesen drei Regeln ist die Umwandlung verlässlich, und alles andere daran ist vorhersehbar.

XML in JSON umwandeln — so geht es

  1. Leg deine XML-Datei auf dieser Seite ab, oder klick, um eine auszuwählen.
  2. Wähl JSON als Ziel. Die Umwandlung läuft in deinem Browser, die Datei wird nicht hochgeladen.
  3. Lade die fertige JSON-Datei herunter.

XML und JSON im Vergleich: was sich ändert

XML im Vergleich zu JSON
XMLJSON
Vollständiger NameExtensible Markup LanguageJavaScript Object Notation
Dateiendung.xml.json
Medientypapplication/xmlapplication/json
Erstmals veröffentlicht19982001
Herausgegeben vonW3C
SpezifikationXML 1.0RFC 8259
LizenzlageOffener StandardOffener Standard
Heutiger StandAktuellAktuell
Öffnet im BrowserJeder BrowserJeder Browser
Stattdessen erwogenYAMLYAML, NDJSON

Was verloren geht

Kommentare überleben nicht. In XML kannst du eine Datei kommentieren, JSON hat dafür keine Syntax — jede erklärende Zeile fällt weg. Das trifft genau die Dateien, die überhaupt kommentiert werden: Konfiguration, die jemand anders weiterpflegen muss.

Das Ergebnis öffnen

Visual Studio Code liest sowohl XML als auch JSON — du kannst das Ergebnis also gegen das Original prüfen, ohne ein zweites Programm zu brauchen.

Wofür die beiden Formate gedacht sind

XML stammt von W3C und wurde 1998 veröffentlicht. Festgehalten ist das in XML 1.0 — lohnt sich zu kennen, wenn die Datei das Programm überleben soll, das sie geschrieben hat.

JSON stammt aus 2001, festgehalten in RFC 8259. Visual Studio Code, jq und Postman lesen das Format.

XML zu JSON: häufige Fragen

Werden meine XML-Dateien irgendwo hochgeladen?

Nein. Diese Umwandlung läuft vollständig in deinem Browser, die Datei verlässt dein Gerät also nicht. Du kannst das selbst nachprüfen: Öffne den Netzwerk-Tab der Entwicklerwerkzeuge und wandle etwas um. Zu sehen sind die Seite selbst und die Statistik- und Werbeanfragen, mit denen dieser Dienst bezahlt wird — und keine einzige, die deine Datei trägt.

Ist das Umwandeln von XML in JSON kostenlos?

Ja. Kein Konto, kein Wasserzeichen und kein Tageskontingent, das sich verbraucht — es läuft auf deinem eigenen Rechner, du darfst also so oft wiederkommen, wie du willst. Dateien bis 100 MB verarbeitet der Browser, 100 auf einmal.

Geht beim Umwandeln von XML in JSON Qualität verloren?

XML und JSON beschreiben Inhalte auf grundverschiedene Weise. Die Umwandlung ist deshalb ein Nachbau und keine Kopie: originalgetreu, aber nicht Byte für Byte dasselbe. XML-Attribute und Textknoten werden beide zu Schlüsseln — eine Ermessensfrage, die der Konverter für dich entscheidet.

Bleiben Kommentare bei XML zu JSON erhalten?

Kommentare überleben nicht. In XML kannst du eine Datei kommentieren, JSON hat dafür keine Syntax — jede erklärende Zeile fällt weg. Das trifft genau die Dateien, die überhaupt kommentiert werden: Konfiguration, die jemand anders weiterpflegen muss.

Unsicher, was du brauchst?

Diese Seite wandelt das eine in das andere um. Wenn du dich noch entscheidest, statt schon umzuwandeln: XML vs JSON beantwortet, welches wofür taugt und was jedes schlecht kann.

Mehr über diese Formate