Website-Suche

Python XML in JSON, XML in Dict


Heute werden wir lernen, wie man XML in JSON und XML in ein Dict in Python umwandelt. Wir können das Python-Modul xmltodict verwenden, um eine XML-Datei zu lesen und sie in ein Dict oder JSON-Datenformat zu konvertieren. Wir können auch durch große XML-Dateien streamen und sie in ein Dictionary umwandeln. Bevor wir in den Programmierteil einsteigen, lassen Sie uns zuerst verstehen, warum die XML-Konvertierung notwendig ist.

Konvertierung von XML in Dict/JSON

XML-Dateien sind allmählich veraltet, aber es gibt ziemlich große Systeme im Web, die dieses Format immer noch verwenden. XML ist schwerer als JSON, und deshalb ziehen die meisten Entwickler letzteres in ihren Anwendungen vor. Wenn Anwendungen das XML verstehen müssen, das von irgendeiner Quelle bereitgestellt wird, kann es eine mühsame Aufgabe sein, es in JSON umzuwandeln. Das xmltodict-Modul in Python macht diese Aufgabe äußerst einfach und unkompliziert.

Einstieg in 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.

Installiere das xmltodict Modul

Hier ist, wie wir das xmltodict-Modul mit dem Python Package Index (pip) installieren können:

pip install xmltodict

Dies wird schnell erledigt, da xmltodict ein sehr leichtgewichtiges Modul ist. Hier ist die Ausgabe für diese Installation:

Das Beste an dieser Installation war, dass dieses Modul von keinem anderen externen Modul abhängig ist und somit leichtgewichtig ist und Konflikte mit Versionen vermeidet. Nur um es zu demonstrieren, kann dieses Modul auf Debian-basierten Systemen ganz 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 Ausgangspunkt, um dieses Modul auszuprobieren, besteht darin, eine Operation durchzuführen, für die es hauptsächlich entwickelt wurde, nämlich XML in JSON-Konvertierungen durchzuführen. Lassen Sie uns einen Codeausschnitt ansehen, 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)))

Lass 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 anzuzeigen.

Konvertierung einer XML-Datei in JSON

Das Halten von XML-Daten direkt im Code ist weder immer möglich noch realistisch. In der Regel bewahren wir unsere Daten entweder in einer Datenbank oder in Dateien auf. Wir können Dateien direkt auswählen und sie ebenfalls in JSON umwandeln. Lassen Sie uns einen Codeausschnitt ansehen, 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))

Lass uns die Ausgabe dieses Programms sehen:

Hier haben wir ein anderes Modul, pprint, verwendet, um die Ausgabe in einem formatierten Format anzuzeigen. Abgesehen davon war die Verwendung der Funktion open(...) unkompliziert, wir haben sie verwendet, um einen Dateideskriptor zu erhalten und dann die Datei in ein JSON-Objekt zu parsen.

Python XML zu Dict

Wie der Modultitel bereits andeutet, wandelt xmltodict tatsächlich die XML-Daten, die wir bereitstellen, in ein einfaches Python-Dictionary um. So können wir die Daten auch ganz einfach mit den Schlüsseln des Dictionaries abrufen. 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'])

Lass uns die Ausgabe dieses Programms sehen:

Die Tags können also zusammen mit den Attributschlüsseln als Schlüssel verwendet werden. Die Attributschlüssel müssen lediglich mit dem @-Symbol vorangestellt werden.

Unterstützung von Namespaces in XML

In XML-Daten haben wir normalerweise eine Reihe von Namensräumen, die den Bereich der von der XML-Datei bereitgestellten Daten definieren. Bei der Konvertierung in das JSON-Format ist es daher notwendig, dass diese Namensräume im JSON-Format ebenfalls bestehen bleiben. Lassen Sie uns diese Beispiel-XML-Datei betrachten:

<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-Namensräume im JSON-Format einfügen 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))

Lass uns die Ausgabe dieses Programms sehen:

JSON zu XML-Konvertierung

Obwohl die Umwandlung von XML in JSON das Hauptziel dieses Moduls ist, unterstützt xmltodict auch die umgekehrte Operation, nämlich 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))

Lass uns die Ausgabe dieses Programms sehen:

Bitte beachten Sie, dass das Geben eines einzelnen JSON-Schlüssels erforderlich ist, damit dies korrekt funktioniert. Wenn wir davon ausgehen, dass wir unser Programm so ändern, dass es mehrere JSON-Schlüssel auf der obersten Ebene der Daten enthält, wie:

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 Hauptebene. Wenn wir versuchen, diese Form von JSON zu unparse, werden wir auf diesen Fehler stoßen:

Dies geschieht, weil xmltodict das JSON mit dem allerersten Schlüssel als das Wurzel-XML-Tag konstruieren muss. Das bedeutet, dass es auf der Wurzelebene der Daten nur einen einzigen JSON-Schlüssel geben sollte.

Schlussfolgerung

In dieser Lektion haben wir ein ausgezeichnetes Python-Modul studiert, das verwendet werden kann, um XML zu parsen und in JSON und umgekehrt zu konvertieren. Wir haben auch gelernt, wie man XML in ein Dictionary mit dem Modul xmltodict umwandelt. Referenz: API-Dokumentation