Zum Hauptinhalt springen
PulsarKit

XML in JSON umwandeln

Wandeln Sie XML in JSON um: Wie Attribute, CDATA und Namespaces behandelt werden, legen Sie selbst fest, und jeder Syntaxfehler nennt die genaue Zeile.

Dateien hier ablegen

.xml, .rss, .svg, .xhtml, .txt · bis 300 MB

Attribute
Weitere Einstellungen

In JSON umwandeln: So geht’s

  1. 1

    XML-Datei ablegen

    Fügen Sie eine Datei oder bis zu zwanzig hinzu. RSS-Feeds, SVG-Grafiken und XHTML-Seiten sind ebenfalls XML und werden genauso gelesen.

  2. 2

    Attribute und Wiederholungen festlegen

    Attribute bekommen wahlweise ein Präfix, werden unter einem Schlüssel gebündelt oder weggelassen. Wiederholte Tags werden entweder immer zu Arrays oder nur dann, wenn sie sich tatsächlich wiederholen.

  3. 3

    Umwandeln und JSON herunterladen

    Klicken Sie auf „In JSON umwandeln“ und speichern Sie das eingerückte Ergebnis. Mehrere Dateien kommen als ein ZIP-Archiv zurück.

Ein Element oder eine Liste mit einem Eintrag

Die heikle Stelle jeder Abbildung von XML auf JSON ist eine Liste mit nur einem Eintrag. <order> mit drei <item>-Kindelementen wird offensichtlich zu einem Array. Dasselbe Dokument mit nur einem <item> sieht dagegen wie ein gewöhnliches Objekt aus, und Code, der in einer Schleife darüber läuft, bricht beim allerersten echten Kunden. Deshalb ist die Array-Regel eine ausdrückliche Einstellung und keine versteckte Heuristik – und deshalb können Sie jedes Kindelement in ein Array zwingen.

Zahlen, die keine Zahlen sind

Die automatische Typerkennung macht aus 42 eine Zahl und aus true einen booleschen Wert. Meist ist das gewollt, gelegentlich eine Katastrophe: Eine Teilenummer 00123 darf nicht zu 123 werden, und eine zwanzigstellige Steuerkennung darf nicht in wissenschaftliche Schreibweise gerundet werden. Werte mit führenden Nullen und Ziffernfolgen mit mehr als fünfzehn Zeichen bleiben deshalb Strings. Schalten Sie die Typerkennung aus, bleibt jeder Wert genau so, wie er geschrieben steht.

Entitätsdeklarationen werden abgelehnt

Ein DOCTYPE mit einer <!ENTITY>-Deklaration wird abgelehnt, bevor das Parsen beginnt. Zehn verschachtelte Entitäten, von denen jede zehnmal auf die vorherige verweist, wachsen zu Gigabytes an Text an und frieren den Tab ein – der klassische Billion-Laughs-Angriff. Hier wird nichts expandiert außer den fünf vordefinierten Entitäten und numerischen Zeichenreferenzen, sodass der Angriff nichts hat, worin er sich entfalten könnte.

Hier geparst, nicht anderswo

Der Parser läuft in Ihrem Browser, in einem Worker-Thread, mit Code, der mit der Seite geladen wurde. Ihr XML wird nie hochgeladen: Es gibt keine Kopie auf einem Server, die gelöscht werden müsste, keine Warteschlange und kein Protokoll, um das Sie sich sorgen müssten. Wenn Sie den Tab schließen, sind das Dokument und das daraus erzeugte JSON verschwunden.

Häufige Fragen

Wo landen XML-Attribute im JSON?

Standardmäßig wird jedes Attribut zu einem Schlüssel im selben Objekt wie die Kindelemente, mit dem Präfix @_, damit es nicht mit einem gleichnamigen Kind-Tag kollidiert. Stattdessen können Sie alle Attribute in einem Unterobjekt @attributes sammeln, das den Inhalt der Elemente sauber hält, oder die Attribute ganz weglassen.

Warum ist ein einzelnes Element kein Array?

Weil nichts im Dokument sagt, dass es eine Liste ist. Mit der Standardregel wird ein Tag nur dann zum Array, wenn es unter demselben Elternelement tatsächlich mehr als einmal vorkommt – so bildet das Ergebnis die Datei genau ab. Braucht der Code, der das JSON verarbeitet, eine feste Struktur, stellen Sie die Array-Einstellung auf „Immer“: Dann kommt auch ein einzelnes Kindelement als Array mit einem Eintrag an.

Was passiert mit CDATA-Abschnitten?

Standardmäßig wird der CDATA-Inhalt in den Text des Elements übernommen, denn CDATA ist nur eine Form der Maskierung und keine eigene Art von Daten. Müssen Sie wissen, welcher Teil eines Werts so maskiert war – etwa weil Sie später wieder XML daraus erzeugen –, wählen Sie die getrennte Variante: Dann landet er in einem eigenen Schlüssel #cdata.

Kann ich Namespace-Präfixe entfernen?

Ja. Ohne Namespaces wird aus dc:title der Schlüssel title, und Feed- und Dokumentformate lassen sich im Code viel leichter ansprechen. Lassen Sie die Option aus, wenn zwei verschiedene Namespaces in derselben Datei denselben lokalen Namen verwenden: Dann ist das Präfix das Einzige, was die Schlüssel auseinanderhält.

Warum erhalte ich einen Fehler wegen eigener Entitäten?

Weil ein Dokument, das im DOCTYPE eigene Entitäten deklariert, abgelehnt statt expandiert wird. Das ist der einzige zuverlässige Schutz gegen XML-Bomben, die durch das Expandieren von Entitäten aus wenigen Kilobytes Gigabytes an Arbeitsspeicher machen können. Entfernen Sie den DOCTYPE-Block, dann wird der Rest des Dokuments normal umgewandelt.

Funktionieren RSS-Feeds und SVG-Dateien?

Ja, beides ist gewöhnliches XML. Ein RSS-Feed wird zu einem Objekt mit den Metadaten des Kanals und einem Array der Einträge – eine Struktur, mit der sich bequem arbeiten lässt. Eine SVG-Datei wird zu ihrem Elementbaum, in dem alle Darstellungsattribute erhalten bleiben. Das ist nützlich, um Grafiken per Code zu untersuchen oder umzuschreiben.

Was passiert, wenn das XML einen Syntaxfehler enthält?

Sie erhalten die Zeile, die Spalte und das betroffene Tag, zum Beispiel ein erwartetes schließendes Tag in Zeile 214, Spalte 5, statt einer bloßen Meldung, dass das Parsen fehlgeschlagen ist. In einer Datei mit Zehntausenden Elementen macht genau das den Unterschied, denn so wissen Sie, wo Sie suchen müssen.

Wird meine Datei irgendwo hochgeladen?

Nein. Decodieren, Validieren und Umwandeln laufen allesamt lokal in Ihrem Browser-Tab. Zu keinem Zeitpunkt ist ein Server beteiligt, deshalb gibt es nach dem Schließen der Seite nirgends eine Kopie Ihres Dokuments.

Ähnliche Tools