Python XML zu JSON, XML zu Dict konvertieren
Heute lernen wir, wie man XML in Python in JSON und Dict umwandelt. Wir können das Python-Modul xmltodict verwenden, um XML-Dateien zu lesen und sie in Dict oder JSON-Daten umzuwandeln. Wir können auch große XML-Dateien streamen und sie in ein Dictionary umwandeln. Bevor wir zum Programmier-Teil übergehen, verstehen wir zuerst, warum die XML-Umwandlung notwendig ist.
XML zu JSON konvertieren / XML zu Dict konvertieren
XML-Dateien sind langsam veraltet, aber es gibt immer noch ziemlich große Systeme im Web, die dieses Format verwenden. XML ist schwerer als JSON und daher bevorzugen die meisten Entwickler letzteres in ihren Anwendungen. Wenn Anwendungen das von einer beliebigen Quelle bereitgestellte XML verstehen müssen, kann es mühsam sein, es in JSON umzuwandeln. Das Modul xmltodict in Python macht diese Aufgabe extrem einfach und unkompliziert.
Erste Schritte mit xmltodict
Wir können mit dem Modul xmltodict beginnen, müssen es aber zuerst installieren. Wir verwenden hauptsächlich pip, um die Installation durchzuführen.
Installation des xmltodict-Moduls
Hier ist, wie wir das xmltodict-Modul mit dem Python Package Index (pip) installieren können:
pip install xmltodict
Das Beste an dieser Installation war, dass dieses Modul von keinem anderen externen Modul abhängt und daher leichtgewichtig ist und Versionskonflikte vermeidet. Um es zu demonstrieren, kann dieses Modul auf Debian-basierten Systemen einfach mit dem apt-Tool installiert werden:
sudo apt install python-xmltodict
Ein weiterer Pluspunkt ist, dass dieses Modul ein offizielles Debian-Paket hat.
Python XML zu JSON
Der beste Startpunkt, um dieses Modul auszuprobieren, wäre die Durchführung einer Operation, für die es hauptsächlich entwickelt wurde, nämlich die Umwandlung von XML in JSON. Schauen wir uns einen Code-Ausschnitt an, wie dies gemacht werden kann:
import xmltodict
import pprint
import json
my_xml = """
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
"""
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(xmltodict.parse(my_xml)))
XML zu JSON konvertieren
XML-Daten immer im Code selbst zu behalten, ist weder immer möglich noch realistisch. Normalerweise speichern wir unsere Daten entweder in einer Datenbank oder in einigen Dateien. Wir können Dateien direkt auswählen und sie in JSON umwandeln. Schauen wir uns an, wie wir die Umwandlung mit einer XML-Datei durchführen können:
import xmltodict
import pprint
import json
with open('person.xml') as fd:
doc = xmltodict.parse(fd.read())
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))
Python XML zu Dict konvertieren
Wie der Modulname selbst andeutet, wandelt xmltodict die von uns bereitgestellten XML-Daten tatsächlich in ein einfaches Python-Dictionary um. So können wir auch einfach auf die Daten mit den Dictionary-Schlüsseln zugreifen. Hier ist ein Beispielprogramm:
import xmltodict
import pprint
import json
my_xml = """
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
"""
my_dict = xmltodict.parse(my_xml)
print(my_dict['audience']['id'])
print(my_dict['audience']['id']['@what'])
Unterstützung von Namespaces in XML
In XML-Daten haben wir normalerweise eine Reihe von Namespaces, die den Geltungsbereich der von der XML-Datei bereitgestellten Daten definieren. Bei der Umwandlung ins JSON-Format ist es dann notwendig, dass diese Namespaces im JSON-Format ebenfalls bestehen bleiben. Betrachten wir diese Beispiel-XML-Datei:
<root xmlns="https://defaultns.com/"
xmlns:a="https://a.com/">
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
</root>
Hier ist ein Beispielprogramm, wie wir XML-Namespaces auch im JSON-Format einbeziehen können:
import xmltodict
import pprint
import json
with open('person.xml') as fd:
doc = xmltodict.parse(fd.read(), process_namespaces=True)
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))
JSON-zu-XML-Umwandlung
Obwohl die Umwandlung von XML in JSON das Hauptziel dieses Moduls ist, unterstützt xmltodict auch die umgekehrte Operation, die Umwandlung von JSON in XML-Form. Wir werden die JSON-Daten im Programm selbst bereitstellen. Hier ist ein Beispielprogramm:
import xmltodict
student = {
"data" : {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
}
print(xmltodict.unparse(student, pretty=True))
Bitte beachten Sie, dass das Bereitstellen eines einzelnen JSON-Schlüssels notwendig ist, damit dies korrekt funktioniert. Wenn wir in Betracht ziehen, dass wir unser Programm so ändern, dass es mehrere JSON-Schlüssel auf der allerersten Datenebene enthält:
import xmltodict
student = {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
print(xmltodict.unparse(student, pretty=True))
In diesem Fall haben wir drei Schlüssel auf der obersten Ebene. Wenn wir versuchen, diese Form von JSON umzuwandeln, werden wir auf einen Fehler stoßen. Dies liegt daran, dass xmltodict versucht, das JSON mit dem allerersten Schlüssel als root XML-Tag zu konstruieren. Das bedeutet, dass auf der obersten Datenebene nur ein einzelner JSON-Schlüssel vorhanden sein sollte.
Schlussfolgerung
In dieser Lektion haben wir ein ausgezeichnetes Python-Modul untersucht, das zum Parsen und Umwandeln von XML in JSON und umgekehrt verwendet werden kann. Wir haben auch gelernt, wie man XML in Dict mit dem xmltodict-Modul umwandelt.