Conversion XML vers JSON en Python, XML vers Dict

Aujourd’hui, nous allons apprendre comment convertir XML en JSON et XML en Dict en python. Nous pouvons utiliser le module python `xmltodict` pour lire un fichier XML et le convertir en Dict ou en données JSON. Nous pouvons également parcourir de grands fichiers XML et les convertir en dictionnaire. Avant d’entrer dans la partie codage, comprenons d’abord pourquoi la conversion XML est nécessaire.

Conversion 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 ont besoin de 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 à réaliser.

Démarrage avec xmltodict

Nous pouvons commencer avec le module `xmltodict`, mais nous devons d’abord l’installer. Nous utiliserons principalement 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 se fera rapidement car xmltodict est un module très léger. Voici la sortie de cette installation : La meilleure chose à propos de cette installation est que ce module ne dépend d’aucun autre module externe, il est donc léger et évite tout conflit de version. Juste pour illustrer, 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 Debian officiel.

Conversion XML vers JSON en Python

Le meilleur endroit pour commencer à essayer ce module sera d’effectuer une opération pour laquelle il a été principalement conçu, c’est-à-dire effectuer des conversions XML vers 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 les données XML en JSON, puis nous utilisons le module json pour afficher le JSON dans un meilleur format.

Conversion d’un fichier XML en JSON

Conserver les données XML dans le code lui-même n’est ni toujours possible ni réaliste. Habituellement, nous conservons nos données soit dans une base de données, soit dans des fichiers. Nous pouvons également directement sélectionner des fichiers et les convertir en JSON. Voyons un extrait de code sur la manière dont 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, puis nous avons analysé le fichier en un objet JSON.

Python XML en Dictionnaire

Comme le suggère le nom du module, xmltodict convertit effectivement les données XML que nous fournissons en simplement un dictionnaire Python. Ainsi, nous pouvons accéder simplement aux données avec les clés du dictionnaire. Voici un programme d’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 la sortie de ce programme : Ainsi, les balises peuvent être utilisées comme clés avec les clés d’attributs également. Les clés d’attributs doivent simplement être préfixées par le symbole @.

Prise en charge des 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 alors nécessaire que ces espaces de noms persistent également dans le format JSON. Considérons ce fichier XML d’exemple :

<root xmlns="https://defaultns.com/"
        xmlns:a="https://a.com/">
    <audience>
        <id what="attribute">123</id>
        <name>Shubham</name>
    </audience>
</root>

Voici un programme d’exemple sur la manière dont nous pouvons inclure les espaces de noms XML dans le format JSON :

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 la sortie de ce programme :

Conversion 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, c’est-à-dire la conversion de JSON en XML. Nous fournirons les données JSON dans le programme lui-même. Voici un programme d’exemple :

import xmltodict

student = {
  "data" : {
    "name" : "Shubham",
    "marks" : {
      "math" : 92,
      "english" : 99
    },
    "id" : "s387hs3"
  }
}

print(xmltodict.unparse(student, pretty=True))

Examinons la sortie de ce programme : Veuillez noter qu’il est nécessaire de fournir une seule clé JSON pour que cela fonctionne correctement. Si nous modifions notre programme pour contenir plusieurs clés JSON au tout premier niveau de données, comme ceci :

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ésérialiser cette forme de JSON, nous rencontrerons cette erreur : Cela se produit car xmltodict doit construire le JSON avec la toute première clé en tant que balise XML racine. Cela signifie qu’il ne devrait 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 comment convertir XML en dictionnaire en utilisant le module xmltodict. Référence : Documentation de l’API

Source:
https://www.digitalocean.com/community/tutorials/python-xml-to-json-dict