XML и JSON — два самых распространённых формата обмена данными, и рано или поздно приходится переводить один в другой: старый API отдаёт XML, а фронтенд ждёт JSON, или наоборот. Разберём, как устроена такая конвертация и на что обратить внимание.
Чем отличаются XML и JSON
XML (eXtensible Markup Language) — формат на основе тегов, знакомый по старым SOAP-API, конфигурационным файлам и RSS-лентам. У элементов могут быть атрибуты, вложенные теги и текстовое содержимое одновременно. JSON (JavaScript Object Notation) — более компактный формат «ключ-значение», который сегодня использует подавляющее большинство REST API.
XML многословнее и требует закрывающих тегов, зато допускает атрибуты и смешанное содержимое. JSON короче и однозначнее ложится на структуры данных языков программирования, поэтому современные API почти всегда выбирают его.
Как атрибуты XML попадают в JSON
При конвертации XML → JSON главный вопрос — куда девать атрибуты, ведь в JSON нет аналога атрибутов тега. Обычно их превращают в обычные ключи с префиксом, например @_: запись <item id="1">текст</item> становится {"item": {"@_id": "1", "#text": "текст"}}. Префикс нужен, чтобы отличить атрибут от вложенного элемента с тем же именем.
Повторяющиеся теги превращаются в массив
Если внутри родительского элемента несколько одинаковых тегов, при конвертации в JSON они собираются в массив:
<items>
<item>a</item>
<item>b</item>
</items>
превращается в:
{ "items": { "item": ["a", "b"] } }
А вот единственный тег без «соседей» останется обычным объектом, а не массивом из одного элемента — это стоит учитывать в коде, который читает результат: единичный элемент и массив из одного элемента обрабатываются по-разному.
Как сконвертировать онлайн
Откройте конвертер XML ⇄ JSON, вставьте XML — получите JSON с атрибутами и массивами по описанным выше правилам. Обработка идёт прямо в браузере, ничего не отправляется на сервер, поэтому можно смело вставлять данные с реальными именами и адресами.
Обратная конвертация: JSON → XML
Обратный переход работает не для любого JSON: у XML всегда один корневой элемент, поэтому JSON для конвертации в XML должен быть объектом с единственным ключом верхнего уровня, а не массивом или примитивным значением. Если структура была получена конвертацией из XML (с ключами @_... и #text), обратное преобразование восстановит исходные атрибуты и текстовые узлы.
Когда это нужно
- Интеграция со старым API, который отдаёт XML, а остальная система работает с JSON.
- Отладка: быстро прочитать длинный XML-документ в более компактном и знакомом виде.
- Миграция конфигов между системами, использующими разные форматы.
Если вместо XML нужно сконвертировать YAML или CSV, для этого есть отдельные инструменты: JSON ⇄ YAML и JSON ⇄ CSV.