Что такое конвертация XML ↔ JSON?
XML (Extensible Markup Language) — это тегово-ориентированный текстовый формат для иерархических данных. Он встречается в SOAP-веб-сервисах, RSS и Atom-лентах, медицинских записях HL7 FHIR, файлах sitemap.xml и файлах конфигурации Maven, Spring и Android Gradle. JSON (JavaScript Object Notation, определённый в RFC 8259) описывает те же вложенные данные, но с фигурными скобками и массивами вместо открывающих и закрывающих тегов. JSON — это то, на чём сегодня говорит почти каждый REST API, и это нативная форма значений каждого браузерного рантайма. Конвертация между двумя форматами звучит тривиально, пока не столкнёшься с атрибутами, смешанным содержимым, повторяющимися потомками и CDATA. Пользовательский regex — неверный ответ; настоящий парсер — правильный. Этот инструмент поставляет настоящий парсер (fast-xml-parser) и запускает его в вашем браузере, так что вы можете вставить XML-конверт от унаследованного SOAP-сервиса и наблюдать, как он становится JSON-объектом.
Как работает маппинг XML ↔ JSON?
Каждая конвертация выполняется локально в вашем браузере с помощью встроенной библиотеки fast-xml-parser (MIT, версия 4.x). Правила маппинга высокого уровня:
- Элемент в ключ: каждое имя XML-элемента становится ключом JSON-объекта.
<user><name>Alice</name></user>маппируется в{"user":{"name":"Alice"}}. - Атрибут в ключ с префиксом: атрибут хранится под ключом, образованным добавлением выбранного префикса. С префиксом
@,<user id="1">даёт{"user":{"@id":"1"}}. - Текстовое содержимое в ключ текстового узла: когда элемент имеет и атрибуты, и текст, текст помещается под выбранным ключом текстового узла.
<price currency="USD">9.99</price>с ключом#textдаёт{"price":{"@currency":"USD","#text":"9.99"}}. - Повторяющиеся потомки в массив: когда включён режим Принудительный массив для повторяющихся дочерних тегов, несколько соседних элементов с одним именем сворачиваются в JSON-массив.
<items><item>A</item><item>B</item></items>становится{"items":{"item":["A","B"]}}. - Секции CDATA: сырой текст внутри
<![CDATA[…]]>сохраняется под ключом#cdata, чтобы угловые скобки и амперсанды не экранировались повторно при обратной конвертации. - JSON в XML — обратное маппирование: ключи объектов становятся элементами, ключи с префиксами — атрибутами, а массивы разворачиваются в повторяющиеся соседние элементы.
Почему стоит конвертировать XML и JSON с помощью этого инструмента?
- Ваши данные остаются на вашей машине. Каждый разбор и каждая сборка выполняются в JavaScript-контексте этой страницы. FHIR-пакеты пациентов, SOAP-конверты с аутентификацией, проприетарные конфигурационные файлы, выгрузки для выставления счетов — ничто из этого не касается наших серверов, потому что в пути выполнения кода нет шага загрузки. Откройте панель «Сеть» и убедитесь сами.
- Конвертация унаследованного SOAP в REST-ориентированный фронтенд — самый распространённый запрос. Банк или страховая компания предоставляет SOAP-эндпоинт, который ещё долго не будет выведен из эксплуатации; React или Vue-приложение, которое его вызывает, не хочет разбираться с XML. Вставьте конверт, получите JSON обратно с атрибутами с префиксами и сохранёнными пространствами имён, вставьте содержимое
Bodyв ваш стор состояния. - RSS, Atom и потребители карт сайтов тоже выигрывают. Каталог подкастов, агрегатор новостей или внутренний дашборд, принимающий
sitemap.xml, может вообще не писать XML-парсер. Конвертируйте ленту однократно, работайте с JSON-массивом, и ваш клиентский код остаётся на языке, на котором он уже говорит. - Экспорт конфигурации завершает список. Maven, Spring, Android Gradle и старые Ant-сборки — все выдают XML; облачный инструментарий на другом конце (Terraform, Ansible, GitHub Actions, cloud-init) читает JSON или YAML. Конвертируйте в браузере вместо запуска Python-скрипта с зависимостью от сторонней библиотеки — особенно полезно в изолированных средах, где вставка в неизвестный веб-сервис неприемлема.
Каковы типичные применения конвертации XML ↔ JSON?
Мост между XML и JSON встречается в интеграционной инженерии, инструментарии API и дата-инженерии. Несколько паттернов доминируют в рабочей нагрузке:
- SOAP-REST-бридж: извлечение payload'а
Bodyиз SOAP-конверта, возвращённого унаследованным банковским или страховым API, и конвертация в JSON для потребления React или Vue фронтендом без серверного прокси-слоя. - Медицинские записи FHIR: конвертация XML-пакетов HL7 FHIR (формат, обязательный для обмена клиническими данными) в JSON для загрузки в коллекцию MongoDB Atlas или JSONB-колонку PostgreSQL, где аналитики могут запрашивать их.
- Обработка карт сайтов и лент: превращение
sitemap.xmlили RSS/Atom-ленты в JSON-массив, чтобы пользовательский индексатор, Slack-бот или виджет дашборда мог итерировать записи без подключения XML-парсера как зависимости.
Как выглядит конвертация XML ↔ JSON туда и обратно?
Небольшой пример. Вставьте <user id="1"><name>Alice</name></user> в поле ввода, установите префикс атрибутов @, оставьте режим XML в JSON и нажмите «Конвертировать». Вывод: {"user":{"@id":"1","name":"Alice"}}. Переключите режим в JSON в XML, вставьте этот JSON обратно, установите отступ 2 пробела и снова нажмите «Конвертировать». Получите <user id="1">\n <name>Alice</name>\n</user> — структурно идентично исходнику. Единственное, что не гарантируется при конвертации туда-обратно, — это порядок атрибутов, поскольку ключи JSON-объектов не упорядочены по спецификации.
Этот конвертер XML ↔ JSON поставляет fast-xml-parser@4, встроенный на том же origin, обрабатывает атрибуты, CDATA, повторяющиеся дочерние теги и префиксы пространств имён, и продолжает работать офлайн после первой загрузки страницы. Без шага загрузки, без CDN-прокси, без аналитики, без телеметрии любого рода. Каждый байт ввода и вывода остаётся в вашем браузере — именно это вам и нужно, когда payload оказывается FHIR-пакетом пациента, SOAP-конвертом с аутентификацией или любой другой формой данных, которую никто за пределами вашей команды не должен видеть.