XML in JSON
Attribute, CDATA und Entities behandelt, und nicht passende Tags präzise benannt.
Nichts, was Sie einfügen, verlässt Ihren Browser. Die connect-src Erlaubnisliste macht daraus eine Garantie des Browsers statt eines Versprechens. Selbst überprüfen
Wandeln Sie XML in JSON um - mit Attributen, CDATA-Abschnitten und Entity-Referenzen korrekt behandelt und fehlerhaftem XML präzise statt allgemein gemeldet.
XML trägt mehr Struktur, als JSON halten kann, diese Richtung verliert also auf benannte Weise Information. Jede davon wird in den Hinweisen gemeldet, wenn sie auf Ihr Dokument zutrifft.
Fehler, die das tatsächliche Problem benennen
Der Browser bringt einen XML-Parser mit, aber seine Fehlermeldung ist ein lokalisiertes HTML-Fragment, das sich nicht verlässlich auslesen lässt. Diese Seite benutzt einen eigenen Parser, damit die Diagnosen die gleiche Qualität haben wie auf der JSON-Seite.
- Nicht passende Tags
- Benennt sowohl das schließende Tag als auch das Element, das es hätte schließen sollen. XML verschachtelt strikt, anders als HTML.
- Nicht geschlossene Elemente
- Listet alles auf, was am Dokumentende noch offen war.
- Ein zweites Wurzelelement
- Ein XML-Dokument hat genau eines. Das ist ein häufiges Ergebnis des Aneinanderhängens zweier Dateien.
- HTML-Gewohnheiten
- Ein Attribut ohne Wert wie checked, oder ein Attributwert ohne Anführungszeichen. Beides ist gültiges HTML und keines ist gültiges XML.
- Nicht beendete Kommentare und CDATA
- Werden an der Stelle gemeldet, an der der Abschnitt geöffnet wurde.
Was JSON nicht abbilden kann
- Gemischter Inhalt
- Ein Element mit Text und Kindelementen zugleich. JSON hat keine Möglichkeit, den Text relativ zu den Kindern geordnet zu halten, also wird der Text in einem einzigen Schlüssel #text gesammelt, und die Umwandlung sagt das.
- Reihenfolge zwischen unterschiedlich benannten Elementen
- Wiederholte Geschwister werden zu einem Array und behalten ihre Reihenfolge, aber die relative Reihenfolge unterschiedlich benannter Geschwister geht verloren, weil JSON-Objektschlüssel keine Reihenfolge tragen.
- Namensräume
- Präfixe bleiben als Teil des Namens erhalten; die Namensraumdeklarationen selbst werden zu gewöhnlichen Attributen.
- Ein Element gegen viele
- Eine Liste mit einem einzigen Element wird zu einem einzelnen Wert statt zu einem Array mit einem Eintrag - die klassische Quelle nachgelagerter Fehler. Schalten Sie „immer Arrays verwenden“ ein, um das zu vermeiden.
Typen
XML ist Text. Alles ist eine Zeichenkette, solange Sie die Typerkennung nicht einschalten, und selbst dann bleibt ein Wert, der eine float64-Rundreise nicht überstehen würde, eine Zeichenkette. Das ist dieselbe Regel wie beim CSV-Konverter und aus demselben Grund.
How to do this in code
Umwandeln im Code.
py Python
import xmltodict, json
data = xmltodict.parse(xml_text)
print(json.dumps(data, indent=2))
# force_list keeps single elements as arrays, which stops the
# classic "sometimes a list, sometimes an object" bug.
data = xmltodict.parse(xml_text, force_list={'item'}) js JavaScript
import { XMLParser } from 'fast-xml-parser';
const parser = new XMLParser({
ignoreAttributes: false,
attributeNamePrefix: '@',
isArray: (name) => name === 'item',
});
const data = parser.parse(xmlText); sh Shell
# xq, the XML front end to jq
xq . input.xml
# Or with Python, no extra install beyond xmltodict
python -c 'import sys,xmltodict,json; print(json.dumps(xmltodict.parse(sys.stdin.read()), indent=2))' < in.xml Häufige Fragen
- Warum ist eine meiner Listen kein Array?
- Weil sie genau ein Element hatte, und ein einzelnes Kind lässt sich nicht von einer Liste mit einem Eintrag unterscheiden. Schalten Sie „immer Arrays verwenden“ ein. Das lohnt sich immer, wenn die Ausgabe Code speist statt eines Menschen, denn es beseitigt eine ganze Fehlerklasse.
- Was ist mit meinen Namensräumen passiert?
- Präfixe überleben als Teil des Schlüsselnamens, und die xmlns-Deklarationen werden zu gewöhnlichen Attributen. JSON kennt keine Namensräume, die semantische Beziehung zwischen beiden geht also verloren.
- Warum lässt sich mein HTML nicht parsen?
- HTML ist kein XML. Ein nicht geschlossenes <br>, Attribute ohne Wert und Werte ohne Anführungszeichen sind alle gültiges HTML und keines davon ist gültiges XML. Für HTML brauchen Sie einen HTML-Parser, nicht diesen.