XML zu JSON: Es ist schwieriger als es aussieht
Warum Konvertierung zwischen XML und JSON überraschende Ergebnisse produziert und wie du mit den Grenzfällen umgehst.
Du hast XML-Daten. Deine JavaScript-App braucht JSON. Konvertiere und mach weiter, oder?
Außer die Konvertierung produziert unerwartete Ergebnisse. Arrays, die existieren sollten, tun es nicht. Attribute landen an seltsamen Stellen. Einzelne Items werden zufällig zu Arrays.
XML und JSON modellieren Daten unterschiedlich. Zwischen ihnen zu konvertieren erfordert Entscheidungen.
Der fundamentale Mismatch
JSON hat: Objekte, Arrays, Strings, Zahlen, Booleans, Null.
XML hat: Elemente, Attribute, Textinhalt, Namespaces, Kommentare, CDATA.
Es gibt keine 1:1-Zuordnung.
Das Array-Problem
XML hat keine Arrays. Es hat wiederholte Elemente.
<users>
<user>Alice</user>
<user>Bob</user>
</users>
Das sollte wahrscheinlich werden:
{"users": {"user": ["Alice", "Bob"]}}
Aber was ist mit:
<users>
<user>Alice</user>
</users>
Ein Element. Ist es ein Array mit einem Item oder nur ein String? Verschiedene Konverter entscheiden unterschiedlich.
Konsistenz ist wichtig. Wenn user manchmal ein Array und manchmal ein String ist, bricht dein Code.
Das Attribut-Problem
XML hat Attribute. JSON nicht.
<product id="123">Widget</product>
Häufige Konvertierungs-Strategien:
{"product": {"_id": "123", "_text": "Widget"}}
{"product": {"@id": "123", "#text": "Widget"}}
{"product": {"$": {"id": "123"}, "_": "Widget"}}
Jede Konvention ist anders. Wisse, was dein Konverter produziert.
Das Namespace-Problem
XML-Namespaces erstellen qualifizierte Namen wie soap:Envelope. JSON hat kein Konzept von Namespaces.
Konverter entweder:
- Schließen Präfixe in Property-Namen ein:
"soap:Envelope" - Strippen Präfixe:
"Envelope" - Erstellen verschachtelte Strukturen für Namespace-Handhabung
Jeder Ansatz hat Kompromisse.
Praktische Tipps
Sei konsistent. Wähle eine Konvertierungs-Bibliothek und bleib dabei. Konverter zu mischen produziert inkonsistente Strukturen.
Erzwinge Arrays. Wenn ein Element mehrere Instanzen haben kann, konfiguriere den Konverter, immer Arrays zu produzieren, selbst für einzelne Elemente.
Teste Grenzfälle. Konvertiere echte Daten, nicht nur Samples. Grenzfälle in Produktionsdaten werden dich überraschen.
Erwäge Alternativen. Wenn du beide Enden kontrollierst, erwäge von Anfang an JSON zu verwenden. Hin und her zu konvertieren verliert Informationen.
JSON zu XML Herausforderungen
Andersherum hat auch Probleme.
Keine Array-Repräsentation. JSON-Arrays werden zu wiederholten Elementen. Du musst diese Elemente benennen.
{"items": [1, 2, 3]}
Wird zu was? <items><item>1</item>...</items>? Woher kommt „item"?
Zahlen-Typen. JSON unterscheidet Zahlen von Strings. XML nicht. 123 könnte zu <value>123</value> werden – ist das eine Zahl oder String?
Wann konvertieren
Mit Legacy-Systemen integrieren. SOAP-APIs und ältere Enterprise-Systeme verwenden XML. Konvertiere an der Grenze.
XML-Daten verarbeiten. JavaScript handhabt JSON viel besser als XML. Konvertiere, verarbeite, konvertiere bei Bedarf zurück.
Einmalige Migrationen. Umzug von XML-basierten zu JSON-basierten Systemen.
Wann nicht konvertieren
Round-Trip-Anforderungen. XML → JSON → XML verliert oft Informationen. Attribute, Namespaces, Reihenfolge.
Schema-Validierung. XML hat mächtige Schema-Sprachen (XSD). JSON Schema ist weniger ausgereift.
Dokument-Verarbeitung. XMLs Mixed-Content-Modell (Text mit eingebetteten Elementen) mappt nicht sauber zu JSON.
XML und JSON repräsentieren Daten unterschiedlich. Konvertierung erfordert Entscheidungen über Arrays, Attribute und Namespaces. Verstehe das Verhalten deines Konverters und teste mit realistischen Daten.