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