JSON zu XML

Konvertiere JSON in deinem Browser in wohlgeformtes XML. Wähle den Namen des Wurzelelements, schließe die XML-Deklaration ein oder lasse sie weg, und wähle 2 Leerzeichen, 4 Leerzeichen oder keine Einrückung.

Eine JSON-Struktur sicher auf Elemente abbilden. Füge JSON ein und erhalte wohlgeformtes XML zurück. Arrays werden zu wiederholten Elementen, ungültige Schlüsselnamen werden in legale Elementnamen umgewandelt, und Deklaration sowie Einrückung liegen bei dir.

XML-Ausgabe

JSON ohne Verwirrung auf XML abbilden

Die beiden Modelle passen nicht zusammen

JSON hat sechs Werttypen — Objekt, Array, Zeichenfolge, Zahl, Boolean und null — und jeder davon ist selbstbeschreibend. XML hat genau ein Primitiv: Text. Alles andere ist Struktur aus Elementen und Attributen. Es gibt keine offizielle Abbildung zwischen den beiden, weshalb sich jeder Konverter, dem du begegnest, etwas anders verhält.

Die hier verwendete Konvention ist die gebräuchlichste und vorhersagbarste. Ein Objekt wird zu einem Element, dessen Kinder seine Schlüssel sind. Eine Zeichenfolge, Zahl oder Boolean wird zu einem Element mit ihrem Text. null wird zu einem leeren Element. Bleiben die Arrays, die kein XML-Gegenstück haben: Der Standardausweg ist, das Elternelement pro Element zu wiederholen, also wird aus {"item": [1, 2]} <item>1</item><item>2</item> statt ein Wrapper-Element erfunden, das das empfangende Schema nicht erwartet.

Nicht jeder JSON-Schlüssel ist ein legaler Elementname

XML-Elementnamen folgen der NCName-Produktion: Sie beginnen mit einem Buchstaben oder Unterstrich, danach sind Buchstaben, Ziffern, Bindestriche, Punkte und Unterstriche erlaubt. Keine Leerzeichen, keine Schrägstriche, keine führende Ziffer und nichts, das in beliebiger Groß-/Kleinschreibung mit den Buchstaben xml beginnt, was die Spezifikation reserviert.

JSON-Schlüssel haben diese Einschränkung nicht — es sind beliebige Zeichenfolgen, und reale Nutzlasten sind voll von "user name", "2024" und "@type". Diese wörtlich auszugeben erzeugt ein Dokument, das kein Parser akzeptiert. Ungültige Zeichen werden daher durch Unterstriche ersetzt und ein führender Unterstrich hinzugefügt, wenn ein Name mit einer Ziffer beginnt. Das ist ein verlustbehafteter Schritt, also falls die Elementnamen flussabwärts wichtig sind, benenne die Schlüssel im JSON zuerst um, statt den Konverter raten zu lassen.

Deklaration, Einrückung und was sicher geändert werden darf

Die <?xml ... ?>-Deklaration ist für UTF-8-Dokumente optional; Parser nehmen ohne sie UTF-8 an. Füge sie ein, wenn die Datei auf die Festplatte geschrieben, über HTTP ausgeliefert oder an eine strenge Enterprise-Pipeline übergeben wird, und lasse sie weg, wenn das Fragment in ein größeres Dokument eingebettet wird, wo eine zweite Deklaration ein fataler Fehler ist.

Einrückung ist die subtilere Wahl. Anders als bei JSON ist Whitespace innerhalb eines XML-Elements Teil des Inhalts, also ändert Pretty-Printing das Dokument technisch: Ein Element, das Ada enthielt, enthält nun einen Zeilenumbruch, einige Leerzeichen, Ada, einen Zeilenumbruch und mehr Leerzeichen. Die meisten Schemas ignorieren das, aber Signaturprüfung, xml:space="preserve"-Abschnitte und whitespace-sensible Formate nicht. Nutze Einrückung beim Lesen und wechsle zu minifizierter Ausgabe für alles, das eine Maschine konsumiert.

Open-Source-Hinweis: Implementiert in Vanilla-JavaScript ohne Fremdbibliotheken.

FAQ

Wird mein JSON irgendwo hochgeladen?
Nein. Das Dokument wird vollständig im Browser mit den eingebauten JSON-Funktionen geparst und serialisiert, also wird nichts an einen Server gesendet.
Wie werden JSON-Arrays dargestellt?
Durch Wiederholen des Elternelements pro Element. {"item": [1, 2]} wird zu <item>1</item><item>2</item>, was die Konvention ist, die die meisten XML-Schemas erwarten.
Was passiert mit Schlüsseln, die keine gültigen Elementnamen sind?
Ungültige Zeichen werden zu Unterstrichen, und ein führender Unterstrich wird hinzugefügt, wenn der Name mit einer Ziffer beginnt. Benenne die Schlüssel zuerst um, falls die genauen Namen wichtig sind.
Warum fehlt in meiner Ausgabe die XML-Deklaration?
Sie ist optional und über eine Checkbox gesteuert. Parser nehmen ohne sie standardmäßig UTF-8 an, und sie muss weggelassen werden, wenn die Ausgabe in ein anderes Dokument eingebettet ist.
Werden Werte als Attribute geschrieben?
Nein. Jeder Wert wird zu Elementtext. Attribute lassen sich aus plain JSON nicht ableiten, also würde ihre Wahl ein Schema erfordern, das dieses Werkzeug nicht hat.
Ändert die Einrückung die Bedeutung des Dokuments?
Technisch ja, weil Whitespace innerhalb eines Elements Inhalt ist. Die meisten Schemas ignorieren ihn, aber nutze minifizierte Ausgabe für signiertes oder whitespace-sensitives XML.