Python xml to objects

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

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

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

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

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

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

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

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

Установка модуля xmltodict

Вот как мы можем установить модуль xmltodict с помощью индекса пакета (pip):

Это будет сделано быстро, поскольку xmltodict – очень легкий модуль. Вот результат этой установки:

Читайте также:  Html стили и скрипты

Модуль xmltodict в python

Модуль не зависит от других внешних модулей, поэтому он легкий и позволяет избежать конфликтов версий.

Чтобы продемонстрировать, в системах на основе Debian этот модуль можно легко установить с помощью инструмента apt:

sudo apt install python-xmltodict

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

XML в JSON

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

import xmltodict import pprint import json my_xml = """ 123 Shubham  """ pp = pprint.PrettyPrinter(indent=4) pp.pprint(json.dumps(xmltodict.parse(my_xml)))

Преобразование xml в json в python

Здесь мы просто используем функцию parse(…) для преобразования данных XML в JSON, а затем мы используем модуль json для печати JSON в лучшем формате.

Преобразование файла 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))

Преобразование xml file в json

Здесь мы использовали другой модуль pprint для печати вывода в отформатированном виде. Кроме того, использование функции open (…) необходимо, чтобы получить дескриптор File, а затем преобразовать файл в объект JSON.

XML для Dict

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

import xmltodict import pprint import json my_xml = """ 123 Shubham  """ my_dict = xmltodict.parse(my_xml) print(my_dict['audience']['id']) print(my_dict['audience']['id']['@what'])

Преобразование xml в dict

Таким образом, теги могут использоваться как ключи вместе с ключами атрибутов. Ключи атрибутов просто должны иметь префикс @.

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

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

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

Пространство имен xml для dict и json

Как преобразовать 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))

Преобразование json в xml

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

import xmltodict student = < "name" : "Shubham", "marks" : < "math" : 92, "english" : 99 >, "id" : "s387hs3" > print(xmltodict.unparse(student, pretty=True))

Ошибка преобразования json в xml

Это происходит потому, что xmltodict необходимо создать JSON с самым первым ключом в качестве корневого тега XML. Это означает, что на корневом уровне данных должен быть только один ключ JSON.

Источник

Python XML to JSON, XML to Dict

Python XML to JSON, XML to Dict

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Today we will learn how to convert XML to JSON and XML to Dict in python. We can use python xmltodict module to read XML file and convert it to Dict or JSON data. We can also stream over large XML files and convert them to Dictionary. Before stepping into the coding part, let’s first understand why XML conversion is necessary.

Converting XML to Dict/JSON

XML files have slowly become obsolete but there are pretty large systems on the web that still uses this format. XML is heavier than JSON and so, most developers prefer the latter in their applications. When applications need to understand the XML provided by any source, it can be a tedious task to convert it to JSON. The xmltodict module in Python makes this task extremely easy and straightforward to perform.

Getting started with xmltodict

We can get started with xmltodict module but we need to install it first. We will mainly use pip to perform the installation.

Install xmltodict module

python install xmltodict module

This will be done quickly as xmltodict is a very light weight module. Here is the output for this installation: The best thing about this installation was that this module is not dependent on any other external module and so, it is light-weight and avoids any version conflicts. Just to demonstrate, on Debian based systems, this module can be easily installed using the apt tool:

sudo apt install python-xmltodict 

Python XML to JSON

The best place to start trying this module will be to perform an operation it was made to perform primarily, to perform XML to JSON conversions. Let’s look at a code snippet on how this can be done:

import xmltodict import pprint import json my_xml = """ 123 Shubham  """ pp = pprint.PrettyPrinter(indent=4) pp.pprint(json.dumps(xmltodict.parse(my_xml))) 

python xml to json

Let’s see the output for this program: Here, we simply use the parse(. ) function to convert XML data to JSON and then we use the json module to print JSON in a better format.

Converting XML File to JSON

Keeping XML data in the code itself is neither always possible nor it is realistic. Usually, we keep our data in either database or some files. We can directly pick files and convert them to JSON as well. Let’s look at a code snippet how we can perform the conversion with an XML file:

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 file to json

Let’s see the output for this program: Here, we used another module pprint to print the output in a formatted manner. Apart from that, using the open(. ) function was straightforward, we used it get a File descriptor and then parsed the file into a JSON object.

Python XML to Dict

As the module name suggest itself, xmltodict actually converts the XML data we provide to just a simply Python dictionary. So, we can simply access the data with the dictionary keys as well. Here is a sample program:

import xmltodict import pprint import json my_xml = """ 123 Shubham  """ my_dict = xmltodict.parse(my_xml) print(my_dict['audience']['id']) print(my_dict['audience']['id']['@what']) 

python xml to dict

Let’s see the output for this program: So, the tags can be used as the keys along with the attribute keys as well. The attribute keys just need to be prefixed with the @ symbol.

Supporting Namespaces in XML

In XML data, we usually have a set of namespaces which defines the scope of the data provided by the XML file. While converting to the JSON format, it is then necessary that these namespaces persist in the JSON format as well. Let us consider this sample XML file:

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

xml namespace to dict and json

Let’s see the output for this program:

JSON to XML conversion

ALthough converting from XML to JSON is the prime objective of this module, xmltodict also supports doing the reverse operation, converting JSON to XML form. We will provide the JSON data in program itself. Here is a sample program:

import xmltodict student = < "data" : < "name" : "Shubham", "marks" : < "math" : 92, "english" : 99 >, "id" : "s387hs3" > > print(xmltodict.unparse(student, pretty=True)) 

python json to xml

Let’s see the output for this program: Please note that giving a single JSON key is necessary for this to work correctly. If we consider that we modify our program to contain multiple JSON keys at the very first level of data like:

import xmltodict student = < "name" : "Shubham", "marks" : < "math" : 92, "english" : 99 >, "id" : "s387hs3" > print(xmltodict.unparse(student, pretty=True)) 

python json to xml unparse error

In this case, we have three keys at the root level. If we try to unparse this form of JSON, we will face this error: This happens because xmltodict needs to construct the JSON with the very first key as the root XML tag. This means that there should only be a single JSON key at the root level of data.

Conclusion

In this lesson, we studied an excellent Python module which can be used to parse and convert XML to JSON and vice-versa. We also learned how to convert XML to Dict using xmltodict module. Reference: API Doc

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases. Learn more about us

Источник

Оцените статью