You are currently viewing Python – преобразование JSON в XML

Python – преобразование JSON в XML

Файл JSON — это файл, в котором хранятся простые структуры данных и объекты в формате нотации объектов JavaScript (JSON), который является стандартным форматом обмена данными. Он в основном используется для передачи данных между веб-приложением и сервером.Объект JSON содержит данные в виде пары ключ/значение. Ключи — это строки, а значения-типы JSON. Ключи и значения разделяются двоеточием. Каждая запись (пара ключ/значение) разделяется запятой. Файлы JSON являются легкими, текстовыми, удобочитаемыми для человека и могут редактироваться с помощью текстового редактора.

XML — это язык разметки, предназначенный для хранения данных. Это чувствительно к регистру. XML предлагает вам определить элементы разметки и создать индивидуальный язык разметки. Базовая единица в XML известна как элемент. Язык XML не имеет предопределенных тегов. Это упрощает обмен данными, транспорт данных, изменения платформы, расширение доступности данных XML-файла. xml

Примечание: Для получения дополнительной информации обратитесь к XML | Основы

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

Сравнение между JSON и XML

JSONXML
Объект JSON имеет типXML — данные не имеют типа
Типы JSON: строка, число, массив, логическое значениеВсе XML — данные должны быть строковыми
Данные легко доступны в виде объектов JSONНеобходимо проанализировать XML-данные
JSON поддерживается большинством браузеровКроссбраузерный анализ XML может быть сложным
JSON не имеет возможностей отображенияXML предоставляет возможность отображения данных, поскольку это язык разметки
JSON поддерживает только текстовые и числовые типы данных.XML поддерживает различные типы данных, такие как числа, текст, изображения, диаграммы, графики и т.д. Он также предоставляет возможности для передачи структуры или формата данных с фактическими данными.
Получить значение легкоПолучение значения затруднено
Поддерживается многими инструментами AjaxНе полностью поддерживается Ajax toolkit
Полностью автоматизированный способ десериализации/сериализации JavaScriptРазработчикам приходится писать код JavaScript для сериализации/де сериализации из XML
Встроенная поддержка объектаОбъект должен быть выражен условностями – в основном упущено использование атрибутов и элементов.
Он поддерживает только кодировку UTF-8.Он поддерживает различные кодировки
Он не поддерживает комментарии.Он поддерживает комментарии.
Файлы JSON легко читаются по сравнению с XML.XML — документы относительно сложнее читать и интерпретировать.
Он не обеспечивает никакой поддержки пространств именОн поддерживает пространства имен.
Он менее защищен.Это более безопасно, чем JSON.

Обработка JSON в Python 3

Для обработки формата файла JSON Python предоставляет модуль с именем json.

ШАГ 1: импортируйте модуль json

import json as JS

ШАГ 2: импортируйте xml.etree. Модуль ElementTree

import xml.etree.ElementTree as ET

ШАГ 3: Прочитайте файл json

здесь, “данные” — это переменная, в которую мы загрузили наши данные JSON.

with open("quiz.json", "r") as json_file:  data = JS.load(json_file); 

ШАГ 4. Создание корневого элемента

Каждый xml-файл должен содержать ровно один корневой элемент

root = ET.Element("quiz")

ШАГ 5. Построение подэлементов корневого

подэлемента принимает два параметра:

  • root — это имя переменной, в которой хранится корневой элемент.
  • subelement_name: Это имя подэлемента. Пример:
Maths = ET.SubElement(root, "maths")

ШАГ 6: Постройте дерево xml-документа

tree = ET.ElementTree(root)

ШАГ 7: Запишите xml в quiz.xml файл

tree.write("quiz.xml")

Примечание : XML-элементы не поддерживают целочисленные значения, поэтому нам нужно преобразовать их в строку.

Пример:

Файл JSON:

# Program to read JSON file
# and generate its XML file

# Importing json module and xml
# module provided by python
import json as JS
import xml.etree.ElementTree as ET

# Opening JSON file in read mode
with open("myfile3.json", "r") as json_file:

	# loading json file data
	# to variable data
	data = JS.load(json_file);

	# Building the root element
	# of the xml file
	root = ET.Element("quiz")

	# Building the sub root elements
	# We don't add text since the value
	# associated with subelement is a
	# python dictionary
	Maths = ET.SubElement(root, "maths")

	# Building subelement of maths as q1
	Q1 = ET.SubElement(Maths, "q1")
	ET.SubElement(Q1, "question").
	text = data["quiz"]["maths"]["q1"]["question"]

	# Building multiple subelements with name options to hold different values
	# Xml elements cannot hold integer values so we need to
	# convert them to string
	ET.SubElement(Q1, "options").text = str(data["quiz"]
											["maths"]["q1"]
											["options"][0])
	
	ET.SubElement(Q1, "options").text = str(data["quiz"]
											["maths"]["q1"]
											["options"][1])
	
	ET.SubElement(Q1, "options").text = str(data["quiz"]
											["maths"]["q1"]
											["options"][2])
	
	ET.SubElement(Q1, "options").text = str(data["quiz"]
											["maths"]["q1"]
											["options"][3])
	
	ET.SubElement(Q1, "answer").text = str(data["quiz"]
										["maths"]["q1"]
										["answer"])

	# Building subelement of maths as q2
	Q2 = ET.SubElement(Maths, "q2")
	ET.SubElement(Q2, "question").text = data["quiz"]
	["maths"]["q2"]["question"]
	
	# Building multiple subelements
	# with name options to hold
	# different values
	ET.SubElement(Q2, "options").text = str(data["quiz"]
											["maths"]
											["q2"]
											["options"][0])
	
	ET.SubElement(Q2, "options").text = str(data["quiz"]
											["maths"]
											["q2"]
											["options"][1])
	
	ET.SubElement(Q2, "options").text = str(data["quiz"]
											["maths"]["q2"]
											["options"][2])
	
	ET.SubElement(Q2, "options").text = str(data["quiz"]
											["maths"]["q2"]
											["options"][3])
	
	ET.SubElement(Q2, "answer").text = str(data["quiz"]
										["maths"]["q2"]
										["answer"])

	# Building the tree of the xml
	# elements using the root element
	tree = ET.ElementTree(root)

	# Writing the xml to output file
	tree.write("quiz.xml")

Выход: