Python XML en JSON, XML en Dict
Aujourd'hui, nous allons apprendre comment convertir XML en JSON et XML en Dict en python. Nous pouvons utiliser le module xmltodict de python pour lire un fichier XML et le convertir en Dict ou en données JSON. Nous pouvons également traiter de grands fichiers XML et les convertir en Dictionnaire. Avant de passer à la partie codage, comprenons d'abord pourquoi la conversion XML est nécessaire.
Conversion de XML en Dict/JSON
Les fichiers XML sont lentement devenus obsolètes, mais il existe encore de grands systèmes sur le web qui utilisent ce format. XML est plus lourd que JSON et donc, la plupart des développeurs préfèrent ce dernier dans leurs applications. Lorsque les applications doivent comprendre le XML fourni par une source quelconque, il peut être fastidieux de le convertir en JSON. Le module xmltodict en Python rend cette tâche extrêmement facile et directe à effectuer.
Commencer avec xmltodict
Nous pouvons commencer avec le module xmltodict, mais nous devons d'abord l'installer. Nous allons principalement utiliser pip pour effectuer l'installation.
Installer le module xmltodict
Voici comment nous pouvons installer le module xmltodict en utilisant Python Package Index (pip) :
pip install xmltodict
Cela sera fait rapidement car xmltodict est un module très léger. Voici le résultat de cette installation :
La meilleure chose à propos de cette installation est que ce module n'est pas dépendant d'aucun autre module externe et donc, il est léger et évite les conflits de version. Juste pour démontrer, sur les systèmes basés sur Debian, ce module peut être facilement installé en utilisant l'outil apt:
sudo apt install python-xmltodict
Un autre point positif est que ce module a un paquet officiel Debian.
Python XML vers JSON
Le meilleur endroit pour commencer à essayer ce module sera de réaliser une opération pour laquelle il a été principalement conçu, à savoir effectuer des conversions XML en JSON. Regardons un extrait de code sur la façon dont cela peut être fait :
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)))
Voyons le résultat de ce programme :
Ici, nous utilisons simplement la fonction parse(...) pour convertir des données XML en JSON et ensuite nous utilisons le module json pour afficher le JSON dans un meilleur format.
Conversion d'un fichier XML en JSON
Garder les données XML dans le code lui-même n'est ni toujours possible ni réaliste. En général, nous conservons nos données soit dans une base de données, soit dans des fichiers. Nous pouvons également sélectionner directement des fichiers et les convertir en JSON. Regardons un extrait de code pour voir comment nous pouvons effectuer la conversion avec un fichier XML :
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))
Voyons le résultat de ce programme :
Ici, nous avons utilisé un autre module pprint pour afficher la sortie de manière formatée. En dehors de cela, l'utilisation de la fonction open(...) était simple, nous l'avons utilisée pour obtenir un descripteur de fichier et avons ensuite analysé le fichier en un objet JSON.
Python XML en dictionnaire
Comme le nom du module le laisse entendre, xmltodict convertit en fait les données XML que nous fournissons en un simple dictionnaire Python. Nous pouvons donc accéder facilement aux données avec les clés du dictionnaire. Voici un programme exemple :
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'])
Voyons le résultat de ce programme :
Ainsi, les balises peuvent être utilisées comme clés avec les clés d'attribut également. Les clés d'attribut doivent simplement être précédées du symbole @.
Soutenir les espaces de noms dans XML
Dans les données XML, nous avons généralement un ensemble d'espaces de noms qui définissent la portée des données fournies par le fichier XML. Lors de la conversion au format JSON, il est donc nécessaire que ces espaces de noms persistent également dans le format JSON. Considérons ce fichier XML exemple:
<root xmlns="https://defaultns.com/"
xmlns:a="https://a.com/">
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
</root>
Voici un exemple de programme sur la façon d'inclure des espaces de noms XML dans le format JSON également :
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))
Voyons le résultat de ce programme :
Conversion de JSON en XML
Bien que la conversion de XML en JSON soit l'objectif principal de ce module, xmltodict prend également en charge l'opération inverse, qui consiste à convertir le JSON en XML. Nous fournirons les données JSON dans le programme lui-même. Voici un exemple de programme :
import xmltodict
student = {
"data" : {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
}
print(xmltodict.unparse(student, pretty=True))
Voyons le résultat de ce programme :
Veuillez noter qu'il est nécessaire de donner une seule clé JSON pour que cela fonctionne correctement. Si nous considérons que nous modifions notre programme pour contenir plusieurs clés JSON au tout premier niveau des données comme :
import xmltodict
student = {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
print(xmltodict.unparse(student, pretty=True))
Dans ce cas, nous avons trois clés au niveau racine. Si nous essayons de déparser cette forme de JSON, nous rencontrerons cette erreur :
Cela se produit parce qu'xmltodict doit construire le JSON avec la toute première clé comme la balise racine XML. Cela signifie qu'il ne doit y avoir qu'une seule clé JSON au niveau racine des données.
Conclusion
Dans cette leçon, nous avons étudié un excellent module Python qui peut être utilisé pour analyser et convertir XML en JSON et vice-versa. Nous avons également appris à convertir XML en dictionnaire à l'aide du module xmltodict. Référence : documentation API







