JSON in XML zu konvertieren ist die Umkehrung eines verlustbehafteten Mappings, was bedeutet: Sie müssen Entscheidungen treffen, die JSON nie verlangt hat: Was ist das Wurzelelement? Wird dieser Schlüssel zum Attribut oder zum Kindelement? Wie wird ein JSON-Array zu wiederholten XML-Tags? Dieser Guide behandelt die Konventionen für JSON-zu-XML —— Wurzelelemente, Arrays, Attribute und Escapen —— in JavaScript, Python und im Browser.
Ein Wurzelelement wählen
XML verlangt genau ein Wurzelelement; JSON hat diese Regel nicht. Die erste Entscheidung ist, was alles andere umschließt. Wenn Ihr JSON ein Objekt mit einem einzigen Schlüssel auf oberster Ebene ist, ist dieser Schlüssel die natürliche Wurzel:
{ "note": { "to": "Ada", "from": "Bob" } }
<note>
<to>Ada</to>
<from>Bob</from>
</note>Wenn das JSON mehrere Schlüssel auf oberster Ebene hat (oder ein Array ist), gibt es keine eindeutige Wurzel, sodass Konverter alles in ein synthetisches Element wie <root> hüllen:
{ "to": "Ada", "from": "Bob" }
<root>
<to>Ada</to>
<from>Bob</from>
</root>Attribute aus Schlüsseln mit @-Präfix
Für den Round-Trip mit der XML-zu-JSON-Konvention werden Schlüssel, die mit @ beginnen, als Attribute statt als Kindelemente ausgegeben, und der Schlüssel #text wird zum Textinhalt des Elements:
{
"price": { "@currency": "USD", "#text": "9.99" }
}
<price currency="USD">9.99</price>Wenn Sie diese Konvention nicht verwenden, wird jeder Wert zu einem Kindelement —— gültig, nur ausführlicher. Die Konvention @/#text ist es, die XML → JSON → XML verlustfrei macht.
Arrays werden zu wiederholten Elementen
Ein JSON-Array wird nicht zu einem einzelnen Element mit mehreren Werten —— es wird zum wiederholten gleichen Element, weil XML eine Liste so darstellt:
{ "tags": { "tag": ["a", "b", "c"] } }
<tags>
<tag>a</tag>
<tag>b</tag>
<tag>c</tag>
</tags>Eine subtile Konsequenz: Ein Array von Objekten auf oberster Ebene kann nicht die Wurzel sein (das würde mehrere Wurzelelemente erzeugen), es muss also umhüllt werden —— üblicherweise als <root>, das wiederholte <item> enthält.
Werte ohne sauberes Mapping
- Booleans und Zahlen —— XML hat keine Typen, also werden
trueund42als der Texttrueund42geschrieben. - null —— üblicherweise ein leeres/selbstschließendes Element:
<middleName/>. - Schlüssel, die keine gültigen Elementnamen sind —— Namen dürfen nicht mit einer Ziffer beginnen oder Leerzeichen enthalten.
"1st place"ist kein legaler Tag und muss bereinigt werden, sonst entsteht ungültiges XML.
Escapen und Deklaration
Text- und Attributwerte müssen &, < und > escapen (plus " in Attributen). Ein Konverter sollte auch die XML-Deklaration voranstellen, damit die Ausgabe ein vollständiges Dokument ist:
<?xml version="1.0" encoding="UTF-8"?>
<message>B & C are < D</message>Auf ein XSD zielen oder xmlns erzeugen
Wenn Ihr Konsument das XML gegen ein XSD (XML Schema) validiert, muss die Konvertierung über das Mapping Schlüssel→Element hinaus etwas Zusätzliches tun:
- Die Reihenfolge der Elemente zählt. XML-Attribute eines Elements sind ungeordnet (laut Spec), aber Kindelemente sind geordnet, und die meisten XSDs erzwingen das mit
xsd:sequence. Geben Sie Kinder in der vom Schema erwarteten Reihenfolge aus, nicht in der Iterationsreihenfolge der Objektschlüssel, sonst schlägt die Validierung fehl. - Namespace-Mapping. Erstellen Sie
xmlns-Deklarationen als@xmlns-Attribute an der Wurzel wieder und spiegeln Sie präfigierte Namen zurück ins XML ("soap:Envelope"⇒<soap:Envelope>). Ein Konverter, der Namespaces verwirft, produziert XML, das gegen kein XSD validiert, das sie verlangt. - Typbewusste Werte. XML hat keine nativen Typen, daher prüft ein XSD mit
xsd:intoderxsd:dateeinfach, dass der Textinhalt passt. Formatieren Sie den JSON-Wert als Text im vom XSD erwarteten Muster (ISO-Datum, Ganzzahl als String usw.).
JSON in XML im Code konvertieren
// JavaScript —— ein kleiner rekursiver Builder oder eine Bibliothek:
import { XMLBuilder } from 'fast-xml-parser';
const builder = new XMLBuilder({ ignoreAttributes: false, attributeNamePrefix: '@' });
const xml = builder.build(jsonObject);
# Python —— dicttoxml, oder mit xml.etree.ElementTree bauen
from dicttoxml import dicttoxml
xml_bytes = dicttoxml({"note": {"to": "Ada"}}, attr_type=False)JSON in XML online konvertieren
Fügen Sie Ihr JSON in den JSON-⇄-XML-Konverter ein und klicken Sie auf To XML. Er wählt eine sinnvolle Wurzel, mappt @-Schlüssel auf Attribute, wiederholt Elemente für Arrays und escaped Sonderzeichen —— alles im Browser. Wenn Ihr JSON Syntaxfehler hat, wird es zuerst repariert; Sie können es auch mit JSON Fix säubern.
Häufig gestellte Fragen
Wie konvertiere ich JSON in XML?
Wählen Sie ein Wurzelelement (einen einzigen Top-Level-Schlüssel oder ein synthetisches <root>) und konvertieren Sie Schlüssel rekursiv in Kindelemente, @-präfigierte Schlüssel in Attribute und Arrays in wiederholte Elemente —— wobei Sie &, < und > im Text escapen.
Wie wird ein JSON-Array zu XML?
Jedes Array-Element wird zu einem separaten Element mit dem gleichen Tag-Namen, weil XML Listen als wiederholte Elemente statt als einen einzelnen mehrwertigen Knoten darstellt.
Wie mache ich aus einem JSON-Wert ein XML-Attribut?
Stellen Sie dem Schlüssel @ voran (z. B. "@id") und legen Sie den Elementtext unter #text ab. Das entspricht der Standard-XML-zu-JSON-Konvention, sodass die Konvertierung reversibel ist.
Was, wenn ein JSON-Schlüssel kein gültiger XML-Elementname ist?
XML-Tag-Namen dürfen nicht mit einer Ziffer beginnen oder Leerzeichen enthalten, daher müssen Schlüssel wie "1st place" bereinigt werden (z. B. zu _1st_place), sonst ist die Ausgabe kein wohlgeformtes XML.
Verwandte Werkzeuge und Guides
- JSON-⇄-XML-Konverter —— konvertiert in beide Richtungen im Browser
- XML-zu-JSON-Konvertierung: Attribute, Textknoten, Arrays und Namespaces —— die umgekehrte Richtung
- CSV und XML in JSON konvertieren
- Was ist JSON? —— die Typen und Regeln des Quellformats