- Startseite
- Blog
- JSON in XML umwandeln (mit Attributen)
JSON in XML umwandeln (mit Attributen)
JSON senden und speichern die meisten Webdienste, Apps und modernen Tools. Viele Systeme erwarten aber weiterhin XML: Produktfeeds, Shop- und Buchhaltungsimporte, ältere Unternehmenssoftware, SOAP-Dienste und viele Konfigurationsdateien. Wandelst du das JSON um, musst du das XML nicht von Hand bauen.
Diese Anleitung zeigt, was aus jedem Teil des JSON in XML wird und wie du mit dem kostenlosen JSON-in-XML-Konverter umwandelst, samt Attributen, Listen und Namen, die XML nicht erlaubt.
Wie JSON zu XML wird
- Jeder Schlüssel eines Objekts wird zu einem Element mit diesem Namen, sein Wert zum Text des Elements.
- Eine Liste (Array) wiederholt ihr Element einmal pro Eintrag.
nullwird zu einem leeren Element wie<subtitle/>;trueundfalsewerden als Text geschrieben.- Alles steht in einem einzigen Wurzelelement, denn ein XML-Dokument muss genau eins haben.
- Zeichen mit Bedeutung in XML werden maskiert:
&wird zu&und<zu<. Zahlen werden genau übernommen,24.50behält also seine Null.
Hier ist der Katalog eines kleinen Ladens als JSON:
{
"name": "Corner Books",
"books": [
{
"@id": "bk101",
"title": "XML & JSON for Everyone",
"price": { "@currency": "EUR", "#text": 29.95 },
"tags": ["data", "web"]
},
{
"@id": "bk102",
"title": "Daten für alle",
"price": { "@currency": "EUR", "#text": 24.50 },
"in stock": false,
"subtitle": null,
"tags": []
}
]
}und das XML daraus, mit catalog als Wurzelelement:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<name>Corner Books</name>
<books id="bk101">
<title>XML & JSON for Everyone</title>
<price currency="EUR">29.95</price>
<tags>data</tags>
<tags>web</tags>
</books>
<books id="bk102">
<title>Daten für alle</title>
<price currency="EUR">24.50</price>
<in_stock>false</in_stock>
<subtitle/>
</books>
</catalog>Schlüssel, die mit @ beginnen, wurden zu Attributen (id="bk101"), und #text wurde zum Text von <price>, neben seinem Attribut currency. Der Schlüssel in stock kann wegen des Leerzeichens kein XML-Name sein und wurde zu in_stock, und die leere Liste tags ergab nichts. Hinweise unter dem Ergebnis sagen dir beides.
Tipp: Der Listenname wird für jeden Eintrag verwendet, "books" ergibt also <books> für jedes Buch. Willst du das übliche <book>, nenne die Liste in deinem JSON "book".
JSON in XML umwandeln
- Öffne den JSON-in-XML-Konverter und füge dein JSON in JSON-Eingabe ein, klicke auf Datei öffnen oder zieh eine .json-Datei in das Feld. Beispiel lädt ein Beispiel. Ein Fehler im JSON wird mit Zeile und Spalte angezeigt.
- Gib unter Wurzelelement einen Namen ein, etwa
catalog,productsoder was das Zielsystem erwartet. - Wähle die anderen Optionen, unten erklärt.
- Klicke auf In XML umwandeln und lade die .xml-Datei herunter oder kopiere sie.
Die Optionen
- Wurzelelement. Der Name des Elements um alles herum. Bis du ihn änderst, heißt es
root. - Einrückung. 2 Leerzeichen, 4 Leerzeichen oder ein Tabulator, damit das XML gut lesbar ist. Die Daten ändern sich dadurch nicht.
- Arrays. Element wiederholen (Standard) ergibt
<tags>data</tags><tags>web</tags>, wie im Beispiel. Einträge einpacken behält die Liste als ein Element und setzt jeden Eintrag in ein<item>; eine leere Liste bleibt dann als leeres Element erhalten:
<catalog>
<name>Corner Books</name>
<books>
<item id="bk101">
<title>XML & JSON for Everyone</title>
<price currency="EUR">29.95</price>
<tags>
<item>data</item>
<item>web</item>
</tags>
</item>
<item id="bk102">
…
<tags/>
</item>
</books>
</catalog>- @-Schlüssel werden Attribute. Standardmäßig an. Schaltest du es aus, werden
@idund#textzu normalen Elementen, mit einem_davor, weil XML-Namen nicht mit@oder#beginnen dürfen:
<books>
<_id>bk101</_id>
<title>XML & JSON for Everyone</title>
<price>
<_currency>EUR</_currency>
<_text>29.95</_text>
</price>
…- XML-Deklaration. Die erste Zeile,
<?xml version="1.0" encoding="UTF-8"?>. Behalte sie für Dateien; lass sie weg, wenn das XML in ein größeres Dokument eingefügt wird.
Wenn das JSON eine Liste ist
Beginnt dein JSON mit [, gibt es keine Schlüssel, nach denen die Datensätze benannt werden könnten, also wird jeder zu einem <item> im Wurzelelement:
[
{ "name": "Ada", "city": "London" },
{ "name": "Alan", "city": "Manchester" }
]<?xml version="1.0" encoding="UTF-8"?>
<people>
<item>
<name>Ada</name>
<city>London</city>
</item>
<item>
<name>Alan</name>
<city>Manchester</city>
</item>
</people>Für <person> packst du die Liste vorher in ein Objekt: { "person": [ … ] }.
Namen, die XML nicht erlaubt
JSON-Schlüssel dürfen alles sein, XML-Namen nicht. Sie dürfen keine Leerzeichen und kaum Satzzeichen enthalten, nicht mit einer Ziffer und nicht mit xml beginnen. Der Konverter korrigiert solche Schlüssel für dich: Andere Zeichen werden zu _, und ein Name mit falschem Anfang bekommt ein _ davor, aus 2024 wird also _2024. Auch ein Doppelpunkt wird ersetzt, damit das Ergebnis nie versehentlich Namensräume enthält. Steuerzeichen, die XML gar nicht erlaubt, werden aus dem Text entfernt, und ein Hinweis nennt ihre Anzahl.
Weitere Tools
- XML in JSON: der umgekehrte Weg. Siehe XML in JSON umwandeln.
- XML-Validator: prüfe das Ergebnis gegen das XSD-Schema des Systems, in das du importierst.
- JSON-Formatierer: finde und behebe zuerst Fehler im JSON.
Wird mein JSON hochgeladen?
Nein. Die Umwandlung läuft in deinem Browser, deine Daten verlassen also nie dein Gerät. Unser Server speichert nur, dass eine Umwandlung stattgefunden hat, für das Tageslimit.
Häufige Fragen
Bekomme ich beim Zurückwandeln in JSON dieselbe Datei?
Ähnlich, aber nicht immer genau gleich. XML kennt keine Zahlen, kein true oder false und keine Listen: Alles ist Text, und eine Liste mit einem Eintrag sieht aus wie ein einzelnes Element. Behalte das ursprüngliche JSON, wenn du es brauchst.
Kann ich einen Namensraum hinzufügen?
Nicht im Konverter: Doppelpunkte in Schlüsseln werden ersetzt, damit das XML gültig bleibt. Füge den Namensraum danach zum Wurzelelement hinzu, etwa <catalog xmlns="https://example.com/catalog">.
Warum fehlt ein Schlüssel im XML?
Wahrscheinlich war es eine leere Liste, die mit Element wiederholen kein Element ergibt. Wähle Einträge einpacken, um sie als leeres Element zu behalten.