Tutorial 9 Min. Lesezeit

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.

Jan-Tristan Rudat
Von Jan-Tristan Rudat
Software-Entwickler & Fachredakteur · Aktualisiert: Juni 2026

"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.

Ablauf der XML-zu-JSON-Umwandlung in drei Schritten 1. Parsen XML zu Baum (DOM) 2. Mappen Attribute, Arrays, Typen 3. Serialisieren Objekt zu JSON-Text Schritt 2 entscheidet ueber die Qualitaet: hier werden Attribute und wiederholte Elemente behandelt.
Schematischer Ablauf, identisch in JavaScript, Python und PHP.

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.

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

Verwandte Artikel

XML 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
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige