Конвертер XML в JSON
Вставьте XML, получите JSON мгновенно. Конвертирует атрибуты в ключи @_, обрабатывает повторяющиеся элементы как массивы. 100% в браузере, без загрузки, без регистрации.
Настройки · 2 пробела · XML → JSON
Что такое конвертация XML в JSON и как она работает?
XML (Extensible Markup Language) и JSON (JavaScript Object Notation) — оба являются форматами структурированных данных, но имеют принципиально разные модели: XML — это дерево элементов с атрибутами и смешанным содержимым (текст вперемешку с дочерними элементами); JSON — это дерево объектов, массивов, строк, чисел, булевых значений и null. Конвертация между ними требует набора конвенций для преодоления этого несоответствия.
Этот инструмент использует наиболее широко принятую конвенцию — ту же, что используют популярные библиотеки fast-xml-parser (Node.js), xmltodict (Python) и JAXB (Java):
**1. Атрибуты → префикс @_.** XML-атрибуты не имеют прямого эквивалента в JSON. Конвенция состоит в представлении их как ключей с префиксом @_. Поэтому
**2. Текстовое содержимое элемента с атрибутами → #text.** Когда элемент имеет как атрибуты, так и текстовое содержимое —
**3. Повторяющиеся соседние элементы → массивы.** XML допускает несколько дочерних элементов с одинаковым именем; JSON-объекты не могут иметь дублирующиеся ключи. Решение — собирать одноимённых соседей в массив. Один дочерний элемент
**4. Без приведения типов — все значения остаются строками.** XML не имеет встроенной системы типов для текстового содержимого. Значение «123» в XML — это строка. Конвертация его в число JSON 123 требует предположения о намерении автора — предположения, которое неверно для почтовых индексов («01234» → 1234), телефонных номеров, дополненных идентификаторов и строк десятичных дробей с важной точностью. Этот инструмент сохраняет все значения как строки. Применяйте приведение типов в собственном коде для полей, где вы знаете тип.
**5. Потери для комментариев, инструкций по обработке и пространств имён.** XML поддерживает возможности, которых нет в JSON: комментарии (), инструкции по обработке (), семантика пространств имён. Они отбрасываются или аппроксимируются при конвертации. Для безвредной работы с XML — переформатирования, минификации, валидации — используйте XML Форматировщик. Для обратной конвертации — построения XML из JSON — используйте Конвертер JSON в XML.
**Зачем вообще конвертировать XML в JSON?** JSON — нативный формат JavaScript и формат обмена данными по умолчанию для REST API. Если вы получаете XML от устаревшего SOAP-сервиса, RSS-ленты, карты сайта или корпоративной системы, конвертация в JSON позволяет работать с данными, используя стандартный доступ к объектам JavaScript, запросы JSON path и любую базу данных или API, понимающие JSON. Конвертация — это односторонний мост: полезен для потребления XML-данных в современном стеке, но не для сохранения или обратной конвертации XML-документов.
// Convert XML to JSON in Node.js using fast-xml-parser
import { XMLParser } from 'fast-xml-parser';
const xml = `<catalog>
<product id="P01">
<name>Wireless Headphones</name>
<price currency="USD">79.99</price>
</product>
</catalog>`;
const parser = new XMLParser({
ignoreAttributes: false, // preserve attributes
attributeNamePrefix: '@_', // @_ prefix for attributes
textNodeName: '#text', // #text for mixed element content
parseAttributeValue: false, // no type coercion on attributes
parseTagValue: false, // no type coercion on element text
});
const result = parser.parse(xml);
console.log(JSON.stringify(result, null, 2));
// {
// "catalog": {
// "product": {
// "@_id": "P01",
// "name": "Wireless Headphones",
// "price": {
// "@_currency": "USD",
// "#text": "79.99"
// }
// }
// }
// } Ключевые возможности
Конвертация в реальном времени
JSON-вывод обновляется мгновенно по мере ввода или вставки XML — кнопка «Конвертировать» не нужна. Большие входные данные (>200 КБ) автоматически переключаются в ручной режим для сохранения отзывчивости браузера.
Конвенция префикса атрибутов @_
XML-атрибуты становятся JSON-ключами с префиксом @_ в соответствии с конвенцией fast-xml-parser и xmltodict.
Автоопределение массивов для повторяющихся элементов
Одноимённые соседние элементы автоматически становятся JSON-массивом. Один
Без приведения типов — значения остаются строками
Все XML-значения сохраняются как JSON-строки. Ведущие нули, телефонные номера, дополненные коды и строки, похожие на булевые, такие как «true» или «false», никогда не конвертируются молча в числа или булевые значения.
100% конфиденциальность в браузере
Вся конвертация выполняется локально в вашем браузере с помощью JavaScript. Ваш XML — включая учётные данные, внутренние конфиги и конфиденциальные нагрузки — никогда не отправляется на сервер, не записывается и не хранится.
Сообщения об ошибках правильной оформленности
Если ваш XML не является правильно оформленным, инструмент сообщает точную строку и столбец первой ошибки, позволяя немедленно найти и исправить проблему перед конвертацией.
Примеры
Конфигурационный файл
<?xml version="1.0" encoding="UTF-8"?>
<appConfig version="2.1" env="production">
<database>
<host>db.example.com</host>
<port>5432</port>
<name>myapp_prod</name>
<pool max="10" min="2"/>
</database>
<cache enabled="true">
<ttl>3600</ttl>
<driver>redis</driver>
</cache>
</appConfig> Небольшой конфиг приложения с атрибутами и вложенными элементами. Атрибуты становятся ключами с префиксом @_ в выводе JSON: version="2.1" становится "@_version": "2.1" внутри appConfig, а атрибуты max и min элемента pool становятся "@_max": "10" и "@_min": "2". Все значения — включая port и ttl — остаются строками, а не числами, поскольку конвертер не выполняет приведение типов.
Фрагмент карты сайта
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://go-tools.org/tools/xml-to-json</loc>
<lastmod>2026-05-29</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://go-tools.org/tools/json-to-xml</loc>
<lastmod>2026-05-29</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset> Фрагмент sitemap.xml из двух URL. Поскольку под
RSS-элемент
<item> <title>XML to JSON: A Practical Guide</title> <link>https://go-tools.org/blog/xml-to-json-guide</link> <pubDate>Thu, 29 May 2026 00:00:00 GMT</pubDate> <category>Developer Tools</category> <description>Learn how XML attributes map to @_ keys, how repeated elements become arrays, and why values stay strings in any XML-to-JSON conversion.</description> <guid isPermaLink="true">https://go-tools.org/blog/xml-to-json-guide</guid> </item>
Элемент RSS 2.0. Элемент guid имеет атрибут isPermaLink, поэтому в JSON вывод для guid становится объектом с "@_isPermaLink": "true" и "#text": "https://go-tools.org/blog/xml-to-json-guide" — атрибут и текстовое содержимое элемента сосуществуют как соседние ключи. Все остальные элементы имеют только текстовое содержимое и напрямую конвертируются в строковые значения.
Как использовать
- 1
Вставьте ваш XML
Введите или вставьте XML в поле ввода выше. Также можно нажать «Загрузить пример» — конфигурационный файл, фрагмент карты сайта или RSS-элемент.
- 2
Смотрите JSON-вывод в реальном времени
JSON мгновенно появляется в панели вывода. Атрибуты становятся ключами с префиксом @_, текстовое содержимое смешанных элементов становится #text, а повторяющиеся соседние элементы — массивами. При необходимости настройте отступ (2 или 4 пробела).
- 3
Скопируйте или скачайте
Нажмите «Скопировать», чтобы поместить JSON в буфер обмена, или «Скачать», чтобы сохранить его в виде файла .json для вашего приложения, API или конвейера обработки данных.
Типичные ловушки конвертации
Забывают, что значения остаются строками
Конвертер не выполняет приведение типов. Если код потребителя ожидает числа JSON, а XML содержит числовые строки, их нужно явно привести после конвертации. Полагаться на неявное приведение строки к числу (оператор == JavaScript или арифметические операторы) ненадёжно — всегда используйте parseInt(), parseFloat() или Number() намеренно.
// XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" } ← string, not number
// Dangerous: comparing as-is
if (config.timeout > 25) { ... } // "30" > 25 coerces, but fragile // XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" }
// Safe: explicit coercion where you know the type
if (parseInt(config.timeout, 10) > 25) { ... } Несовпадение формы одного элемента и массива
Когда есть только один элемент
// XML with one item: <root><item>a</item></root>
// JSON: { "root": { "item": "a" } } ← string, not array
result.root.item.forEach(i => console.log(i)); // TypeError: not a function // Normalize to array regardless of count const items = [].concat(result.root?.item ?? []); items.forEach(i => console.log(i)); // safe for 0, 1, or many
Смешанное содержимое и ключ #text
Когда элемент имеет как атрибуты, так и текстовое содержимое, текст помещается под #text. Обращение к текстовому значению как к обычной строке вернёт объект. Всегда проверяйте, является ли значение элемента строкой или объектом с ключом #text, когда возможны атрибуты.
// XML: <price currency="USD">29.99</price>
// JSON: { "price": { "@_currency": "USD", "#text": "29.99" } }
const amount = result.price; // { "@_currency": "USD", "#text": "29.99" }, not "29.99" // Handle both plain string and @_/#text object const raw = result.price; const amount = typeof raw === 'object' ? raw['#text'] : raw; // "29.99"
XML-ввод с нарушенной правильной оформленностью
Конвертер требует правильно оформленного XML. Наиболее распространённые причины ошибок правильной оформленности: неэкранированный & в текстовом содержимом (используйте &), несовпадающие теги (
<!-- Unescaped & — well-formedness error --> <query>name = 'Alice' & role = 'admin'</query>
<!-- Escaped & — valid XML --> <query>name = 'Alice' & role = 'admin'</query>
Значения с ведущими нулями, испорченные приведением типов
Этот инструмент сохраняет ведущие нули, поскольку не выполняет приведения типов. Если вы постобрабатываете JSON с помощью библиотеки, которая выполняет приведение (некоторые валидаторы JSON-схем, ORM-маппёры), ведущий ноль может быть потерян. Всегда явно объявляйте тип поля как string в вашей схеме.
// XML: <zipCode>01234</zipCode>
// This tool outputs: { "zipCode": "01234" } ← correct
// But if a downstream schema coerces:
// { zipCode: z.number() } → 1234 ← leading zero lost // Declare ZIP codes and other padded identifiers as strings
// { zipCode: z.string() } → "01234" ← correct Типичные сценарии
- Потребление SOAP и устаревших XML API
- Устаревшие корпоративные сервисы (банковские, страховые, логистические) нередко предоставляют SOAP API, возвращающие XML. Конвертируйте ответ в JSON для работы с данными с помощью современных JavaScript-инструментов, хранения в документоориентированной базе данных или передачи потребителю REST API.
- Обработка RSS и Atom-лент
- Ленты RSS 2.0 и Atom 1.0 — это XML. Конвертируйте XML ленты в JSON для извлечения заголовков, ссылок, дат публикации и описаний в агрегаторах лент, конвейерах обработки контента и системах уведомлений без зависимости от библиотеки XML-парсинга.
- Разбор файлов карты сайта
- Файлы sitemap.xml перечисляют URL сайта с метаданными. Конвертируйте карту сайта в JSON для анализа охвата URL, построения очередей обхода, сравнения карт сайта между окружениями или передачи URL в инструмент проверки ссылок или SEO-аудита.
- Преобразование конфигурационных файлов
- Многие корпоративные системы (Spring, Maven, Ant, JBoss, Tomcat) используют XML-конфигурационные файлы. Конвертируйте их в JSON для анализа, написания скриптов миграции, генерации документации или импорта в инструменты, нативно работающие с JSON.
- Мобильная и Android-разработка
- Ресурсы Android, файлы компоновки и AndroidManifest.xml — всё это XML. Конвертируйте их в JSON для скриптов анализа, автоматического аудита или генерации документации об объявленных разрешениях, активностях и значениях ресурсов.
- Миграция данных и ETL
- Экспорт данных из корпоративных систем (ERP, CRM, расчёт зарплаты) нередко поставляется в XML. Конвертируйте в JSON как первый шаг ETL-конвейера для загрузки данных в JSON-ориентированное хранилище, такое как MongoDB, Firestore или REST API.
Технические детали
- DOMParser браузера для разбора XML
- XML-ввод разбирается с помощью нативного DOMParser браузера с MIME-типом 'text/xml' — тот же движок, что используется для рендеринга SVG и XHTML. Он полностью соответствует спецификации XML 1.0 и сообщает об ошибках правильной оформленности с указанием строки и столбца. Этот подход корректно обрабатывает пространства имён, секции CDATA, инструкции по обработке и ссылки на сущности без каких-либо сторонних зависимостей.
- Рекурсивная сериализация DOM в JSON
- После разбора инструмент рекурсивно обходит DOM-дерево. Узлы элементов становятся JSON-объектами; их атрибуты — ключами с префиксом @_; элементы, содержащие только текст, становятся обычными строками; элементы, имеющие и атрибуты, и текстовое содержимое, получают ключ #text для текста. Одноимённые соседние элементы собираются и выводятся как JSON-массив. Текстовые узлы, содержащие только пробелы между элементами, отбрасываются.
- Без приведения типов — сохранение строк
- Все значения атрибутов и текстовое содержимое записываются в вывод JSON как строки. Ни parseInt, ни parseFloat, ни разбор булевых значений не применяются. Это намеренное проектное решение для предотвращения молчаливого повреждения данных для значений с ведущими нулями, десятичных дробей с важной точностью и строк, похожих на булевые. Приведение типов, где необходимо, должно применяться явно в коде потребителя.
- 100% работа в браузере — без загрузки и сервера
- Вся обработка выполняется в JavaScript-движке вашего браузера. Никакие данные не передаются по сети ни в какой момент. Входные данные размером более 200 КБ автоматически переключаются из режима реального времени в ручной режим (требуется явное нажатие «Конвертировать») для сохранения отзывчивости браузера и предотвращения блокировки основного потока при интенсивном обходе DOM.
Лучшие практики
- Сначала валидируйте правильную оформленность XML
- Если ваш XML-источник написан вручную или сгенерирован системой, которая иногда выдаёт некорректный вывод, валидируйте его перед конвертацией. Используйте кнопку «Валидировать» в XML Форматировщике для подтверждения правильной оформленности XML и получения точных местоположений ошибок.
- Нормализуйте поля «один или несколько» до массивов
- Когда ваша XML-схема допускает как один, так и несколько дочерних элементов с одинаковым именем, вывод JSON будет объектом для одного элемента и массивом для нескольких. Всегда нормализуйте эти поля в коде потребителя: const items = [].concat(result.items ?? []) — это безопасно для нуля, одного или нескольких элементов и предотвращает ошибки TypeError.
- Применяйте приведение типов явно и избирательно
- Поскольку этот инструмент сохраняет все значения как строки, применяйте приведение типов намеренно в коде для конкретных полей, где оно необходимо. Использование parseInt(val, 10) для заведомо целочисленного поля безопасно. Широкое применение Number(val) рискует испортить значения с ведущими нулями, пустые строки и десятичные дроби с важной точностью.
- Проверяйте наличие #text при обращении к значениям элементов
- Если элемент может иметь атрибуты в некоторых нагрузках и не иметь в других, его JSON-значение будет либо обычной строкой (без атрибутов), либо объектом с ключами @_ и #text (с атрибутами). Пишите надёжные методы доступа: const val = typeof node === 'object' ? node['#text'] : node. Этот шаблон обрабатывает обе формы и предотвращает молчаливые значения undefined.
- Для безвредной работы с XML используйте XML Форматировщик
- Конвертация XML в JSON отбрасывает комментарии, инструкции по обработке и семантику пространств имён. Если вам нужно сохранить всё XML-содержимое точно, используйте XML Форматировщик для форматирования, минификации и валидации без каких-либо потерь. Конвертируйте в JSON только тогда, когда вам нужно работать с данными в JSON-ориентированном контексте.
Часто задаваемые вопросы
Отправляются ли мои XML-данные на сервер при использовании этого инструмента?
Как XML-атрибуты отображаются в выводе JSON?
Выполняет ли конвертер приведение чисел или булевых значений?
Как обрабатываются повторяющиеся (одноимённые соседние) элементы?
Является ли конвертация XML в JSON обратимой?
Как конвертировать JSON обратно в XML?
Что происходит с пространствами имён XML?
Почему 0123 становится "0123", а не 123?
В чём разница между этим инструментом и XML-форматировщиком?
Есть ли ограничение на размер файла?
Обрабатывает ли конвертер секции CDATA?
Можно ли конвертировать XML с несколькими корневыми элементами?
Похожие инструменты
Все инструменты →Base64 декодер и кодировщик
Кодирование и форматирование
Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.
Конвертер CSV в JSON
Кодирование и форматирование
Конвертируйте CSV в JSON в браузере. RFC 4180, определение типов, заголовок, безопасность больших целых. 100% приватно, без загрузки.
JSON Diff и сравнение
Кодирование и форматирование
Сравнивайте два JSON-файла мгновенно в браузере. Side-by-side подсветка, вывод JSON Patch (RFC 6902), игнорирование шума вроде timestamp и ID. 100% приватно, без загрузки.
Форматировщик и валидатор JSON
Кодирование и форматирование
Форматирование, проверка и улучшение читаемости JSON прямо в браузере. Бесплатный онлайн-инструмент с проверкой синтаксиса, поиском ошибок, минификацией и копированием в один клик. Полная приватность.
Валидатор JSON Schema
Кодирование и форматирование
Проверяйте JSON по любой JSON Schema мгновенно в браузере. Поддержка Draft 2020-12, 2019-09 и Draft-07 с точными путями ошибок. 100% приватно — без загрузки, без аккаунта, бесплатно.
Конвертер JSON в CSV
Кодирование и форматирование
Конвертируйте JSON в CSV в браузере. Пресеты RFC 4180, Excel-EU, TSV, Pipe. Flatten или Stringify. 100% приватно, без загрузки.