Heute werden wir lernen, wie man XML in JSON und XML in ein Dictionary in Python konvertiert. Wir können das Python-Modul xmltodict
verwenden, um eine XML-Datei zu lesen und sie in ein Dictionary oder JSON-Daten zu konvertieren. Wir können auch über große XML-Dateien streamen und sie in ein Dictionary konvertieren. Bevor wir zum Codierungsteil übergehen, sollten wir zuerst verstehen, warum die XML-Konvertierung notwendig ist.
XML in Dictionary/JSON konvertieren
XML-Dateien sind langsam veraltet geworden, aber es gibt ziemlich große Systeme im Web, die dieses Format noch 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 eine mühsame Aufgabe sein, es in JSON zu konvertieren. Das xmltodict
-Modul in Python macht diese Aufgabe äußerst einfach und unkompliziert durchführbar.
Erste Schritte mit xmltodict
Wir können mit dem xmltodict
-Modul beginnen, aber wir müssen es zuerst installieren. Wir werden hauptsächlich pip verwenden, um die Installation durchzuführen.
Installieren Sie das xmltodict-Modul
Hier ist, wie Sie das xmltodict-Modul mit dem Python Package Index (pip) installieren können:
pip install xmltodict
Dies wird schnell erledigt sein, da xmltodict
ein sehr leichtes Modul ist. Hier ist die Ausgabe für diese Installation: Das Beste an dieser Installation war, dass dieses Modul nicht von einem anderen externen Modul abhängig ist und daher leichtgewichtig ist und Konflikte mit anderen Versionen vermeidet. Nur zur Demonstration, auf Debian-basierten Systemen kann dieses Modul leicht 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 Ort, um mit diesem Modul zu beginnen, ist eine Operation durchzuführen, für die es hauptsächlich entwickelt wurde, nämlich XML in JSON umzuwandeln. Schauen wir uns einen Codeausschnitt 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)))
Lassen Sie uns die Ausgabe dieses Programms sehen: Hier verwenden wir einfach die
parse(...)
-Funktion, um XML-Daten in JSON umzuwandeln, und dann verwenden wir das json
-Modul, um JSON in einem besseren Format auszugeben.
XML-Datei in JSON konvertieren
XML-Daten direkt im Code zu behalten, ist weder immer möglich noch realistisch. Normalerweise halten wir unsere Daten entweder in einer Datenbank oder in Dateien. Wir können auch Dateien direkt auswählen und sie in JSON konvertieren. Sehen wir uns einen Code-Ausschnitt an, wie wir die Konvertierung 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))
Lassen Sie uns die Ausgabe dieses Programms sehen: Hier haben wir ein weiteres Modul pprint verwendet, um die Ausgabe formatiert auszugeben. Abgesehen davon war die Verwendung der
open(...)
-Funktion unkompliziert, wir haben sie verwendet, um einen Datei-Deskriptor zu erhalten und dann die Datei in ein JSON-Objekt zu parsen.
Python XML zu Dict
Wie der Modulname selbst suggeriert, wandelt xmltodict die von uns bereitgestellten XML-Daten in ein einfaches Python-Wörterbuch um. So können wir einfach auf die Daten mit den Wörterbuchschlü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'])
Schauen wir uns die Ausgabe für dieses Programm an: Die Tags können als Schlüssel zusammen mit den Attributschlüsseln verwendet werden. Die Attributschlüssel müssen einfach mit dem Symbol
@
vorangestellt werden.
Unterstützung von Namespaces in XML
In XML-Daten haben wir normalerweise einen Satz von Namespaces, die den Geltungsbereich der Daten festlegen, die von der XML-Datei bereitgestellt werden. Beim Konvertieren in das JSON-Format ist es dann notwendig, dass diese Namespaces auch im JSON-Format erhalten bleiben. Betrachten wir diese Beispieldatei:
<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 einbinden 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))
Schauen wir uns die Ausgabe für dieses Programm an:
JSON in XML konvertieren
Obwohl die Konvertierung von XML in JSON das Hauptziel dieses Moduls ist, unterstützt xmltodict auch die Umkehrung, die Konvertierung 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))
Lasst uns das Ausgabe für dieses Programm sehen: Bitte beachten Sie, dass die Angabe eines einzelnen JSON-Schlüssels erforderlich ist, damit dies korrekt funktioniert. Wenn wir berücksichtigen, dass wir unser Programm so ändern, dass es mehrere JSON-Schlüssel auf der obersten Ebene der Daten enthält, wie zum Beispiel:
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 Wurzelebene. Wenn wir versuchen, diese Form von JSON zu entpacken, stoßen wir auf diesen Fehler: Dies geschieht, weil xmltodict das JSON mit dem ersten Schlüssel als Wurzel-XML-Tag konstruieren muss. Dies bedeutet, dass es nur einen einzelnen JSON-Schlüssel auf der Wurzelebene der Daten geben sollte.
Schlussfolgerung
In dieser Lektion haben wir ein ausgezeichnetes Python-Modul untersucht, das zum Parsen und Konvertieren von XML in JSON und umgekehrt verwendet werden kann. Wir haben auch gelernt, wie man XML in ein Dictionary mit dem xmltodict-Modul konvertiert. Referenz: API-Dokumentation
Source:
https://www.digitalocean.com/community/tutorials/python-xml-to-json-dict