Особенности и конвертация один в другой
К нам в редакцию сайта часто приходят просьбы рассказать о тех или иных расширениях, о типах файлов, об форматах. Сегодня поговорим о двух JSON и XML.
С самого начала
Итак, файлы с расширением JSON (JavaScript Object Notation) и XML (eXtensible Markup Language) — это два самых популярных формата для хранения и передачи данных между системами (например, между сервером и веб-сайтом, или между разными микросервисами). Несмотря на общую задачу, они принципиально разные, по структуре и можно сказать разные по философии.
Для чего они нужны?
JSON создавался как легкий, понятный человеку формат обмена данными, изначально основанный на синтаксисе JavaScript. Сегодня он является стандартом де-факто для веб-разработки и REST API. Практически любое современное веб-приложение принимает и отдает данные в формате JSON. XML — это более старый, но чрезвычайно мощный язык разметки, наследник HTML. Он создавался для хранения сложных, структурированных данных, обмена документами и конфигурации систем. До сих пор активно используется в корпоративном ПО (Enterprise), банковских системах, протоколах SOAP и для файлов конфигурации (например, в Android-разработке).
Особенности форматов
JSON - это простота и скорость Синтаксис построен на двух структурах: пары ключей - значение (объекты) и упорядоченные списки (массивы). Типы данных - поддерживает строки, числа, логические значения (true/false), массивы, объекты и null.
Плюсы:
- Очень компактный (меньше «мусорных» символов — нет закрывающих тегов).
- Быстро парсится (обрабатывается) компьютерами и легко читается людьми.
- Идеально интегрирован с JavaScript.
Минусы:
- Официально не поддерживает комментарии.
- Нет встроенной строгой валидации схем, хотя существует JSON Schema.
XML - это мощь и расширяемость. Синтаксис построен на древовидной структуре с использованием тегов (похоже на HTML). Каждый тег должен быть закрыт: <tag>данные</tag>. Типы данных - все данные по умолчанию являются строками. Чтобы задать тип, нужны внешние схемы (XSD).
Плюсы:
- Поддерживает атрибуты внутри тегов (например, <user id="123">).
- Жесткая валидация данных с помощью DTD или XML Schema (можно строго запретить принимать некорректный файл).
- Поддерживает комментарии.
- Подходит для разметки сложных текстовых документов (текст с вкраплениями тегов).
Минусы:
- Избыточен, т.к. из-за повторяющихся закрывающих тегов файлы весят значительно больше.
- Сложнее и медленнее обрабатывается парсерами.
Сравнение на одном примере
Допустим, нам нужно передать данные о пользователе и его телефонах.
В формате JSON:

В формате XML:

Конвертация из одного в другой
Прямая конвертация «один в один» не всегда проходит идеально из-за конструктивных различий форматов.
Главные проблемы при конвертации:
В XML у тега могут быть атрибуты: <price currency="USD">100</price>. В JSON нет понятия «атрибут». При конвертации XML -> JSON приходится придумывать костыли, например: {"price": {"@currency": "USD", "#text": "100"}}.
Типы данных при конвертации XML -> JSON числа и логические переменные часто превращаются в строки (так как в XML все строка), и их приходится принудительно приводить к типам данных вручную.
В JSON порядок ключей в объекте не имеет значения. В XML порядок тегов может быть критически важен.
Как конвертировать?
Ответ здесь очевиден и это онлайн-конвертеры, например - https://convert-from.net. Это надежно и проще всего. Для разовых или постоянных задач.
В Python для этого отлично подходят библиотеки xmltodict (превращает XML в обычный Python-словарь, который затем одной командой json.dumps() переводится в JSON) или стандартный xml.etree.ElementTree.
Удачи вам!
*** |