Что это за инструмент?
XML и JSON — оба древовидных формата данных, но применяются в разных контекстах: устаревшие корпоративные API, SOAP-сервисы, RSS/Atom-ленты и многие форматы конфигурации до сих пор используют XML, тогда как современные REST API и код на JavaScript почти повсеместно используют JSON. Этот инструмент переводит данные между двумя форматами, избавляя вас от необходимости вручную писать один из них при интеграции старых и новых систем.
Преобразование построено непосредственно на встроенном в браузер API DOMParser для чтения XML и следует структуре, определённой спецификацией W3C XML 1.0 при генерации — поэтому создаваемый XML является корректно сформированным, а принимаемый XML разбирается точно так же, как это сделал бы браузер или любая XML-библиотека, соответствующая стандарту.
Поскольку в XML есть понятия, которых нет в JSON (атрибуты, смешанное содержимое из текста и элементов, обязательный единственный корневой элемент), а в JSON есть понятия, которых нет в XML (нативные массивы, булевы значения, числа), инструмент использует документированное и широко применяемое соглашение: атрибут XML `name="value"` превращается в ключ JSON `"@_name": "value"`, текстовое содержимое элемента становится либо прямым строковым значением элемента (если у него нет дочерних элементов или атрибутов), либо ключом `"#text"` рядом с атрибутами, а повторяющиеся соседние элементы с одинаковым тегом превращаются в массив JSON.
Зачем его использовать?
- Двунаправленность — конвертируйте JSON в XML или XML в JSON на одном и том же экране.
- Корректная обработка вложенности — вложенные объекты JSON становятся вложенными элементами XML на любой глубине, и наоборот.
- Массивы преобразуются в повторяющиеся элементы — массив JSON под одним ключом превращается в такое же количество соседних XML-элементов с одинаковым тегом, а повторяющиеся XML-теги возвращаются обратно как массив JSON.
- Атрибуты XML сохраняются — благодаря соглашению `@_имяАтрибута` данные атрибутов не теряются незаметно.
- Копируйте в буфер обмена или скачивайте в виде файла .json или .xml.
- Полностью работает на стороне клиента — ничто из вставленного вами никуда не загружается.
Как использовать
- Выберите направление: «XML → JSON» или «JSON → XML».
- Вставьте данные в поле ввода.
- Нажмите «Convert».
- Проверьте результат, затем скопируйте его или нажмите «Download», чтобы сохранить файл.
Пример
Ввод
{"user":{"name":"Alice","age":30}}Результат
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>Alice</name>
<age>30</age>
</user>Единственный ключ верхнего уровня JSON («user») становится корневым элементом XML; если в JSON несколько ключей верхнего уровня, инструмент оборачивает всё в элемент <root>, поскольку XML требует ровно один корневой элемент.
Практические советы
- Миграция устаревшей конфигурации XML (например, файла настроек старого приложения) в современную систему на основе JSON: вставьте XML, конвертируйте и при необходимости скорректируйте имена полей.
- Тестирование SOAP- или XML-RPC-эндпоинта из JavaScript: преобразуйте здесь свой JSON-запрос в XML перед отправкой или конвертируйте XML-ответ обратно в JSON, чтобы легко его изучить.
- Если в вашем JSON данные, которые в XML представлялись бы повторяющимися элементами, хранятся в виде массива, сначала вложите этот массив под один ключ (например, {"items":{"item":[1,2,3]}}), а не оставляйте его голым массивом верхнего уровня, поскольку XML не может иметь несколько корневых элементов.
Почему важно соглашение об атрибутах @_
Самая сложная часть преобразования JSON/XML заключается в том, что элементы XML могут одновременно нести два типа данных — атрибуты и дочернее содержимое, — тогда как обычный объект JSON состоит только из ключей и значений. Без соглашения, разделяющего их, простой конвертер либо полностью потерял бы атрибуты, либо смешал бы их с дочерними элементами так, что надёжно преобразовать обратно уже не получится. Соглашение о префиксе `@_name` (также используемое широко распространёнными библиотеками в экосистеме JavaScript) решает эту проблему, придавая атрибутам отдельную, однозначную форму ключа, благодаря чему `<product id="42">Widget</product>` корректно преобразуется в обе стороны как `{"product":{"@_id":"42","#text":"Widget"}}`, не теряя id и не заставляя гадать, какое значение чему соответствует.
Часто задаваемые вопросы
Что происходит с JSON, у которого несколько ключей верхнего уровня?
XML требует единственный корневой элемент, поэтому если ваш объект JSON содержит несколько ключей верхнего уровня (например, {"a":1,"b":2}), результат оборачивается в элемент <root>: <root><a>1</a><b>2</b></root>. Если в JSON ровно один ключ верхнего уровня, он напрямую становится именем корневого элемента.
Как атрибуты XML представлены в JSON?
Атрибут вроде <user id="7"> превращается в ключ "@_id": "7" в итоговом объекте JSON. Это распространённое, документированное соглашение (используемое, например, библиотекой fast-xml-parser), которое позволяет отличать атрибуты от дочерних элементов.
Становятся ли повторяющиеся элементы XML массивом JSON?
Да. Если у элемента несколько дочерних элементов с одинаковым именем тега, например <items><item>1</item><item>2</item></items>, преобразование в JSON даёт {"items":{"item":["1","2"]}}. Обратное преобразование этого JSON в XML воспроизводит повторяющиеся элементы <item>.
Сохраняются ли числа и булевы значения при конвертации XML в JSON?
В XML нет нативного понятия чисел или булевых значений — всё является текстом, — поэтому текстовое содержимое передаётся как строка JSON (например, "30", а не 30). Если вам нужны числовые типы, эти поля придётся преобразовать вручную после конвертации.
Загружаются ли мои данные куда-либо?
Нет. Разбор и преобразование полностью происходят в JavaScript в вашем браузере с использованием встроенного API DOMParser — ничего не отправляется на сервер, поэтому инструмент безопасно использовать с приватными конфигурационными файлами или внутренними данными API.