Python XML a JSON, XML a dictado
Hoy aprenderemos cómo convertir XML a JSON y XML a Dict en python. Podemos usar el módulo python xmltodict
para leer archivos XML y convertirlos a datos Dict o JSON. También podemos transmitir archivos XML de gran tamaño y convertirlos a Diccionario. Antes de pasar a la parte de codificación, primero comprendamos por qué es necesaria la conversión XML.
Conversión de XML a Dict/JSON
Los archivos XML se han vuelto obsoletos lentamente, pero hay sistemas bastante grandes en la web que todavía usan este formato. XML es más pesado que JSON, por lo que la mayoría de los desarrolladores prefieren este último en sus aplicaciones. Cuando las aplicaciones necesitan comprender el XML proporcionado por cualquier fuente, puede ser una tarea tediosa convertirlo a JSON. El módulo xmltodict
en Python hace que esta tarea sea extremadamente fácil y sencilla de realizar.
Primeros pasos con xmltodict
Podemos comenzar con el módulo xmltodict
pero primero debemos instalarlo. Principalmente usaremos pip para realizar la instalación.
Instalar módulo xmltodict
Así es como podemos instalar el módulo xmltodict usando Python Package Index (pip):
pip install xmltodict
sudo apt install python-xmltodict
Otro punto a favor es que este módulo tiene un paquete oficial de Debian.
Python XML a JSON
El mejor lugar para comenzar a probar este módulo será realizar una operación para la que fue creado principalmente, para realizar conversiones de XML a JSON. Veamos un fragmento de código sobre cómo se puede hacer esto:
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)))
Conversión de archivo XML a JSON
Mantener los datos XML en el propio código no siempre es posible ni realista. Por lo general, guardamos nuestros datos en una base de datos o en algunos archivos. Podemos seleccionar archivos directamente y convertirlos a JSON también. Veamos un fragmento de código de cómo podemos realizar la conversión con un archivo 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))
Python XML a dictado
Como sugiere el nombre del módulo, xmltodict en realidad convierte los datos XML que proporcionamos en un simple diccionario de Python. Entonces, también podemos simplemente acceder a los datos con las teclas del diccionario. Aquí hay un programa de muestra:
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'])
Compatibilidad con espacios de nombres en XML
En los datos XML, normalmente tenemos un conjunto de espacios de nombres que define el alcance de los datos proporcionados por el archivo XML. Al convertir al formato JSON, es necesario que estos espacios de nombres también permanezcan en el formato JSON. Consideremos este archivo XML de muestra:
<root xmlns="https://defaultns.com/"
xmlns:a="https://a.com/">
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
</root>
Aquí hay un programa de muestra sobre cómo podemos incluir espacios de nombres XML en el formato JSON también:
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))
Conversión de JSON a XML
Aunque la conversión de XML a JSON es el objetivo principal de este módulo, xmltodict también permite realizar la operación inversa, convirtiendo JSON a formato XML. Proporcionaremos los datos JSON en el propio programa. Aquí hay un programa de muestra:
import xmltodict
student = {
"data" : {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
}
print(xmltodict.unparse(student, pretty=True))
import xmltodict
student = {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
print(xmltodict.unparse(student, pretty=True))
Conclusión
En esta lección, estudiamos un excelente módulo de Python que se puede usar para analizar y convertir XML a JSON y viceversa. También aprendimos cómo convertir XML a Dict usando el módulo xmltodict. Referencia: API Doc