XML zu JSON in JavaScript, Python und PHP: Code-Tutorial
Konkrete, lauffaehige Code-Beispiele mit xml2js, fast-xml-parser, xmltodict und SimpleXML, dazu die wichtigsten Mapping-Regeln und eine ehrliche Einordnung, wann ein Online-Tool die schnellere Wahl ist.
"XML in JSON umwandeln" klingt nach einer Zeile Code, ist es aber selten. Sobald Attribute, wiederholte Elemente oder Namespaces ins Spiel kommen, unterscheiden sich die Ergebnisse je nach Sprache und Bibliothek deutlich. Dieser Ratgeber zeigt fuer JavaScript, Python und PHP jeweils den kuerzesten sauberen Weg, erklaert die typischen Stolperfallen und sagt klar, wann sich der Code-Aufwand lohnt und wann nicht.
Alle Beispiele basieren auf einem einzigen, kleinen XML-Dokument, damit sich die Ergebnisse direkt vergleichen lassen. Es enthaelt absichtlich ein Attribut, einen Textinhalt und ein wiederholtes Element, also genau die drei Faelle, an denen naive Loesungen scheitern.
Das Beispiel-XML fuer alle Sprachen
Wir nutzen durchgehend folgendes Dokument. Es modelliert eine Bestellung mit einer ID als Attribut und zwei Positionen:
<bestellung id="1042">
<kunde>Erika Mustermann</kunde>
<position>Tastatur</position>
<position>Maus</position>
</bestellung>
Drei Dinge sind hier wichtig: id ist ein Attribut, nicht ein Kind-Element. kunde kommt einmal vor, position zweimal. Eine korrekte Umwandlung muss das Attribut kennzeichnen und die zwei Positionen zu einem Array zusammenfassen, waehrend kunde ein einzelner Wert bleibt.
XML zu JSON in JavaScript
JavaScript hat keine eingebaute XML-zu-JSON-Funktion. Es gibt zwar den DOMParser im Browser, der liefert aber nur einen DOM-Baum, kein fertiges Objekt. Den Baum von Hand zu durchlaufen ist fehleranfaellig, vor allem bei der Array-Bildung. In der Praxis verwendet man eine der beiden etablierten Bibliotheken.
fast-xml-parser (empfohlen)
fast-xml-parser ist schnell, synchron und ohne native Abhaengigkeiten. Attribute werden ueber ignoreAttributes: false aktiviert und standardmaessig mit dem Praefix @_ versehen:
// npm install fast-xml-parser
import { XMLParser } from 'fast-xml-parser';
const xml = `<bestellung id="1042">
<kunde>Erika Mustermann</kunde>
<position>Tastatur</position>
<position>Maus</position>
</bestellung>`;
const parser = new XMLParser({ ignoreAttributes: false });
const obj = parser.parse(xml);
console.log(JSON.stringify(obj, null, 2));
// {
// "bestellung": {
// "kunde": "Erika Mustermann",
// "position": ["Tastatur", "Maus"],
// "@_id": "1042"
// }
// } xml2js (etabliert)
xml2js ist seit Jahren weit verbreitet und arbeitet asynchron. Hier zur Klarheit mit async/await. Attribute landen standardmaessig in einem eigenen $-Objekt, Elemente werden grundsaetzlich als Array geparst:
// npm install xml2js
import { parseStringPromise } from 'xml2js';
const obj = await parseStringPromise(xml);
console.log(JSON.stringify(obj, null, 2));
// {
// "bestellung": {
// "$": { "id": "1042" },
// "kunde": ["Erika Mustermann"],
// "position": ["Tastatur", "Maus"]
// }
// } Tipp
Achten Sie auf den Unterschied bei kunde: fast-xml-parser liefert einen String, xml2js standardmaessig ein Array mit einem Element. Wer mit xml2js kein Array fuer einfache Werte will, setzt die Option explicitArray: false.
XML zu JSON in Python
In Python ist xmltodict der pragmatische Standard. Es bildet XML auf verschachtelte Dictionaries ab, die sich direkt mit dem eingebauten json-Modul serialisieren lassen. Attribute erhalten das Praefix @, Textinhalt bei gemischten Elementen den Schluessel #text:
# pip install xmltodict
import json
import xmltodict
xml = """<bestellung id="1042">
<kunde>Erika Mustermann</kunde>
<position>Tastatur</position>
<position>Maus</position>
</bestellung>"""
data = xmltodict.parse(xml)
print(json.dumps(data, indent=2, ensure_ascii=False))
# {
# "bestellung": {
# "@id": "1042",
# "kunde": "Erika Mustermann",
# "position": ["Tastatur", "Maus"]
# }
# }
Wichtig ist hier ensure_ascii=False, sonst werden Umlaute als ü ausgegeben statt als ue beziehungsweise das echte Zeichen. Wer die Standardbibliothek ohne Drittanbieter nutzen will, kann xml.etree.ElementTree verwenden, muss das Mapping und die Array-Bildung dann aber komplett selbst schreiben.
Warnung: die Einzel-Element-Falle
Haette die Bestellung nur eine Position, waere data["bestellung"]["position"] ein einzelner String, kein Array. Code, der stur for p in ...position iteriert, laeuft dann ueber die Zeichen des Strings. Erzwingen Sie konsistente Listen mit xmltodict.parse(xml, force_list=("position",)).
XML zu JSON in PHP
In PHP fuehren simplexml_load_string und json_encode in zwei Zeilen zum Ziel. Das ist der kuerzeste Weg und reicht fuer einfache Dokumente:
<?php
$xml = '<bestellung id="1042">
<kunde>Erika Mustermann</kunde>
<position>Tastatur</position>
<position>Maus</position>
</bestellung>';
$sxe = simplexml_load_string($xml);
$json = json_encode($sxe, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $json;
// {
// "kunde": "Erika Mustermann",
// "position": ["Tastatur", "Maus"]
// }
?>
Das funktioniert, hat aber eine bekannte Schwaeche: json_encode ignoriert bei SimpleXML standardmaessig die Attribute. Im Beispiel fehlt id="1042" komplett im Ergebnis. Wer Attribute braucht, liest sie ueber attributes() explizit aus oder wechselt zu DOMDocument und durchlaeuft den Baum selbst.
JSON_UNESCAPED_UNICODE sorgt auch in PHP dafuer, dass Umlaute lesbar bleiben statt als \uXXXX escaped zu werden.
Die drei Ansaetze im direkten Vergleich
Die Bibliotheken unterscheiden sich vor allem darin, wie sie Attribute kennzeichnen und ob sie einzelne Elemente als Array oder als Einzelwert liefern:
| Bibliothek | Sprache | Attribut-Praefix | Einzel-Element | Besonderheit |
|---|---|---|---|---|
| fast-xml-parser | JavaScript | @_ | Einzelwert | Schnell, synchron, keine Deps |
| xml2js | JavaScript | $-Objekt | Array (Default) | Asynchron, sehr verbreitet |
| xmltodict | Python | @ | Einzelwert | #text bei Mischinhalt |
| SimpleXML + json_encode | PHP | ignoriert (!) | Array bei Wiederholung | Attribute gehen verloren |
Der gemeinsame Ablauf jeder Umwandlung
Egal welche Sprache: Im Kern durchlaufen alle Bibliotheken die gleichen drei Schritte. XML wird zunaechst in einen Baum geparst, dieser Baum wird nach festen Mapping-Regeln in eine sprachinterne Datenstruktur uebersetzt und diese am Ende als JSON serialisiert.
Wann das Online-Tool reicht und wann Code besser ist
Nicht jede Umwandlung braucht Code. Eine ehrliche Faustregel: Geht es um einen einmaligen Fall oder eine schnelle Pruefung, ist ein clientseitiges Browser-Tool die schnellere und sicherere Wahl, weil die Daten den Rechner nicht verlassen. Sobald die Aufgabe wiederholbar oder automatisiert sein soll, lohnt sich der Code.
- Online-Tool: einzelne Dateien, schnelle Sichtpruefung, kein Setup, sensible Daten, die lokal bleiben sollen.
- Code: wiederkehrende Imports, Build-Pipelines, APIs, SOAP-zu-REST-Migration, sehr grosse Dateien, individuelle Mapping-Regeln.
Hinweis zum Datenschutz
Unser XML zu JSON Converter verarbeitet alles direkt im Browser. Es findet kein Upload statt, daher eignet er sich auch fuer XML mit personenbezogenen oder vertraulichen Inhalten, ohne dass eine Auftragsverarbeitung noetig wird.
Haeufige Fragen
Gibt es in JavaScript eine eingebaute Funktion, um XML in JSON umzuwandeln?
Nein, es gibt keine direkte Funktion wie JSON.parse fuer XML. Im Browser steht der DOMParser zur Verfuegung, der XML in einen DOM-Baum einliest. Diesen Baum muss man anschliessend selbst in ein Objekt ueberfuehren. In der Praxis nimmt man dafuer eine Bibliothek wie fast-xml-parser oder xml2js, die das Mapping und die Array-Bildung bereits korrekt erledigt.
Was ist der Unterschied zwischen xml2js und fast-xml-parser?
xml2js ist seit Jahren etabliert und arbeitet standardmaessig asynchron mit Callbacks oder Promises. fast-xml-parser ist neuer, deutlich schneller, hat keine nativen Abhaengigkeiten und arbeitet synchron. Beide laufen in Node.js und im Browser. Fuer neue Projekte ist fast-xml-parser meist die bessere Wahl, vor allem bei grossen Dateien.
Wie behandelt xmltodict in Python wiederholte Elemente?
xmltodict fasst gleichnamige Geschwister-Elemente automatisch zu einer Liste zusammen. Kommt ein Element nur einmal vor, bleibt es ein einzelnes OrderedDict statt einer Liste. Das ist die haeufigste Stolperfalle: Code, der immer eine Liste erwartet, bricht bei einem einzelnen Element. Mit force_list laesst sich erzwingen, dass bestimmte Tags stets als Liste erscheinen.
Warum sind alle Werte nach der Umwandlung Strings statt Zahlen?
XML kennt keine Datentypen, jeder Wert ist dort reiner Text. Konservative Parser uebernehmen Werte deshalb als String, um Datenverluste wie fuehrende Nullen in Postleitzahlen zu vermeiden. fast-xml-parser bietet die Option parseTagValue, xmltodict laesst sich ueber postprocessor steuern. Eine automatische Typinferenz sollte man nur aktivieren, wenn man die Daten kennt.
Wie wandle ich XML mit PHP in JSON um?
Der kuerzeste Weg ist simplexml_load_string gefolgt von json_encode. SimpleXML liest das XML ein, json_encode serialisiert es. Diese Kombination ignoriert allerdings Attribute teilweise und verliert gemischten Inhalt. Fuer praezises Mapping nutzt man stattdessen die DOMDocument-Klasse und durchlaeuft den Baum manuell.
Wann reicht das Online-Tool und wann brauche ich Code?
Fuer einmalige Umwandlungen, schnelle Pruefungen oder einzelne Dateien ist ein Browser-Tool schneller und sicherer, weil keine Daten den Rechner verlassen. Code lohnt sich, sobald die Umwandlung wiederholbar, automatisiert oder Teil eines Build- oder API-Prozesses sein soll, etwa bei einer SOAP-zu-REST-Migration oder einem naechtlichen Import-Job.
Quellen
- W3C: Extensible Markup Language (XML) 1.0
- ECMA International: ECMA-404, The JSON Data Interchange Syntax
- MDN Web Docs: DOMParser
- npm: fast-xml-parser und xml2js
- PyPI: xmltodict
- PHP-Handbuch: simplexml_load_string und json_encode
Verwandte Artikel
XML zu JSON Converter im Vergleich: Tools, Bibliotheken & CLI
Online-Tools gegen xml2js, Python xmltodict und jq, mit ehrlicher Einordnung.
Weiterlesen TechnikXML-Attribute, Namespaces und Arrays nach JSON mappen
Mapping-Konventionen, @-Praefix, #text und wiederholte Elemente als Arrays.
Weiterlesen AnleitungXML in JSON umwandeln: Schritt-fuer-Schritt-Anleitung
Der Grundlagen-Guide ohne Code: einfuegen, konvertieren, kopieren.
WeiterlesenXML jetzt ohne Code umwandeln
Fuer einzelne Dateien geht es schneller im Browser: einfuegen, konvertieren, kopieren. Kein Upload, keine Anmeldung, alles bleibt lokal.
Zum XML zu JSON Converter