Búsqueda de sitios web

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

Artículos relacionados: