Поиск по сайту:

Python XML в JSON, XML в Dict


Сегодня мы узнаем, как конвертировать XML в JSON и XML в Dict в python. Мы можем использовать модуль python xmltodict для чтения файла XML и преобразования его в данные Dict или JSON. Мы также можем выполнять потоковую передачу больших XML-файлов и преобразовывать их в словарь. Прежде чем перейти к кодированию, давайте сначала поймем, почему необходимо преобразование XML.

Преобразование XML в Dict/JSON

Файлы XML постепенно устаревают, но в Интернете есть довольно большие системы, которые все еще используют этот формат. XML тяжелее, чем JSON, поэтому большинство разработчиков предпочитают в своих приложениях последний. Когда приложения должны понимать XML, предоставленный любым источником, преобразование его в JSON может оказаться утомительной задачей. Модуль xmltodict в Python упрощает выполнение этой задачи.

Начало работы с xmltodict

Мы можем начать работу с модулем xmltodict, но сначала нам нужно его установить. В основном мы будем использовать pip для выполнения установки.

Установите модуль xmltodict

Вот как мы можем установить модуль xmltodict, используя индекс пакетов Python (pip):

pip install xmltodict
sudo apt install python-xmltodict

Еще один плюс в том, что этот модуль имеет официальный пакет Debian.

Python XML в JSON

Лучше всего начать пробовать этот модуль с выполнения операции, для которой он был создан в первую очередь, для выполнения преобразований XML в JSON. Давайте посмотрим на фрагмент кода, как это можно сделать:

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)))

Преобразование XML-файла в JSON

Сохранение XML-данных в самом коде не всегда возможно и нереально. Обычно мы храним наши данные либо в базе данных, либо в некоторых файлах. Мы можем напрямую выбирать файлы и конвертировать их в JSON. Давайте посмотрим на фрагмент кода, как мы можем выполнить преобразование с файлом 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 в Dict

Как следует из названия модуля, xmltodict фактически преобразует XML-данные, которые мы предоставляем, в простой словарь Python. Таким образом, мы также можем просто получить доступ к данным с помощью ключей словаря. Вот пример программы:

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'])

Поддержка пространств имен в XML

В XML-данных у нас обычно есть набор пространств имен, который определяет объем данных, предоставляемых XML-файлом. При преобразовании в формат JSON необходимо, чтобы эти пространства имен сохранялись и в формате JSON. Давайте рассмотрим этот образец XML-файла:

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

Вот пример программы о том, как мы можем включить пространства имен XML в формат 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))

Преобразование JSON в XML

Хотя преобразование из XML в JSON является основной целью этого модуля, xmltodict также поддерживает обратную операцию, преобразование JSON в формат XML. Мы предоставим данные JSON в самой программе. Вот пример программы:

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))

Заключение

В этом уроке мы изучили отличный модуль Python, который можно использовать для анализа и преобразования XML в JSON и наоборот. Мы также узнали, как конвертировать XML в Dict с помощью модуля xmltodict. Ссылка: документ API