ToolActToolAct

Конвертер XML в JSON

Ввод XML
Вывод JSON
Строк: 1Символов: 0Байт: 0
Строк: 1Символов: 0Байт: 0

Что такое преобразование XML в JSON?

XML to JSON преобразует XML-разметку в JSON-структуру, чтобы данные было проще использовать в JavaScript, API, no-code инструментах и современных data pipelines. Отображение не всегда очевидно, потому что XML содержит элементы, атрибуты, текстовые узлы, namespaces, порядок и повторяющиеся узлы, а JSON работает с объектами, массивами и простыми значениями. Инструмент полезен для legacy-интеграций, SOAP-ответов, sitemap, RSS, конфигураций и тестовых данных. В production нужно внимательно проверять атрибуты, пустые элементы, mixed content, namespaces и распознавание массивов. Успешно распарсенный JSON не гарантирует, что вся бизнес-информация сохранена в нужной форме. Для production-данных или кодовой базы результат все равно нужно проверить parser, тестами или правилами проекта.

Инструкция по использованию

Инструкция по использованию

  1. Вставьте или введите XML-данные в левое поле ввода
  2. Выберите размер отступа (2 пробела, 4 пробела или табуляция)
  3. Преобразованный JSON отображается справа с подсветкой синтаксиса
  4. Проверьте результат преобразования и исправьте любые ошибки XML
  5. Нажмите «Копировать» или «Скачать» для сохранения результата

Примечания к структуре данных

  • XML-атрибуты, повторяющиеся узлы, пространства имён и смешанный текст могут отображаться в JSON несколькими допустимыми способами; проверьте сгенерированную структуру перед использованием.
  • Для миграции API определите правило сопоставления полей, а не полагайтесь на один пример преобразования.

Применение

Преобразуйте XML-данные в читаемый JSON для анализаВставьте SOAP, RSS, данные устройства или партнёрский XML — браузерный DOMParser преобразует документ в объект JSON, сохраняя корневой элемент, вкладывая дочерние элементы и группируя повторяющиеся имена в массивы. Числовые текстовые значения и true/false конвертируются, когда они достаточно просты для распознавания. Парсер следует спецификации W3C DOM Level 3 Core, поэтому любой корректный XML 1.0, который принимает DOMParser, даст обходимое дерево, а шаг в JSON просто обходит это дерево в глубину, подсчитывая дубликаты соседних элементов для выбора между одиночным объектом и массивом.
Подготовьте тестовые данные перед заменой XML-интеграцииИспользуйте двухпанельный редактор для сравнения исходного XML с отформатированным JSON, затем скопируйте или скачайте output.json для заметки о миграции, тестовых данных или обсуждения API. Отступы можно переключать между 2 пробелами, 4 пробелами и табуляцией для соответствия целевому проекту.
Перехватите некорректный XML до попадания в конвейер обработкиКонвертер показывает ошибки разбора от браузерного XML-парсера вместо молчаливого создания частичного вывода. Он фокусируется на элементах и текстовом содержании, поэтому атрибуты, пространства имён, комментарии, инструкции и проверка схемы всё ещё требуют специализированного XML-инструмента, когда эти детали важны.
Определите, как атрибуты становятся ключами JSONКогда элемент смешивает атрибуты с дочерними элементами, атрибуты обычно получают префикс @, чтобы не конфликтовать с текстовым содержимым или именованными потомками. Проверьте сгенерированный JSON на наличие полей вроде @id или @type и переименуйте их в коде, если нужна плоская структура ключей. Стандартное отображение: `@attribute` для XML-атрибутов, `#text` для текстовых данных рядом с дочерними элементами и локальное имя элемента для каждого потомка — по аналогии с конвенцией Badgerfish, используемой во многих JSON-XML библиотеках.
Определите XML-файлы, которые конвертер намеренно упрощаетДокументы, использующие атрибуты, пространства имён, инструкции, комментарии или блоки CDATA, потеряют детали в JSON-выводе. Считайте результат быстрым читабельным представлением, а не безвозвратной миграцией, когда эти XML-особенности несут бизнес-данные. Распознавание массивов срабатывает только на повторяющихся именах дочерних элементов, поэтому одиночный `<item>` и два соседних `<product>` превратятся в объект с двумя ключами, а не в список, а пространство имён в нотации Clark `{http://example.com/ns}user` отбрасывается от локального имени `user`, что может привести к конфликту с другим элементом без пространства имён с тем же именем.

Технический принцип

Конвертация начинается с встроенного в браузер XML-парсера. `new DOMParser().parseFromString(xmlString, 'application/xml')` возвращает `Document`, соответствующий W3C DOM Level 3 Core, проверяет корректность структуры по XML 1.0 (пятое издание) и представляет результат в виде дерева узлов `Element`, `Attr`, `Text`, `CDATASection` и `Comment`. Если входные данные некорректны, парсер не выбрасывает исключение — он возвращает документ, корневым элементом которого является `<parsererror>`, содержащий расположение и причину, поэтому конвертер сначала проверяет `doc.querySelector('parsererror')` и выводит это сообщение вместо создания частичного JSON. Преобразование дерева в JSON обходит документ в глубину и следует конвенции в стиле Badgerfish. Каждый элемент становится свойством, ключом которого является локальное имя; дочерние элементы становятся вложенными объектами; атрибуты элементов выравниваются с префиксом `@` (напр. `<user id="7">` → `{ "user": { "@id": "7" } }`); текстовое содержимое, соседствующее с дочерними элементами, сохраняется под ключом `#text`. Повторяющиеся sibling-элементы с одинаковым именем сворачиваются в массив JSON: два узла `<item>` становятся `"item": [ ... ]`, но одиночный `<item>` остаётся простым объектом — это известная неоднозначность «один или много», поскольку XML не может отличить список из одного элемента от скалярного значения, тогда как JSON рассматривает `"item": {...}` и `"item": [{...}]` как разные структуры. Некоторые возможности XML не имеют чистого эквивалента в JSON и намеренно теряют данные. Порядок элементов сохраняется в XML, но не гарантируется порядком ключей объекта JSON во всех потребителях (хотя ES2015 указывает порядок вставки для строковых ключей, схемы вроде JSON Schema не ограничивают его). Смешанное содержимое вроде `<p>Hello <b>world</b>!</p>` чередует текст с элементами и не может быть обратимо преобразовано в простую модель ключ-значение. Пространства имён XML в нотации Clark (`{http://example.com/ns}user`) сводятся к локальному имени `user`, что может конфликтовать с несвязанным элементом с тем же именем. Блоки CDATA вроде `<![CDATA[<raw>]]>` разворачиваются в обычный текст. Инструкции обработки (`<?xml-stylesheet ...?>`), комментарии (`<!-- ... -->`) и объявление XML отбрасываются, так как в JSON нет для них синтаксиса. Форматирование отступов выполняется через `JSON.stringify(value, null, indent)` с 2 пробелами, 4 пробелами или `'\t'`.

  • Парсер: `new DOMParser().parseFromString(xml, 'application/xml')` согласно W3C DOM Level 3 Core; ошибки появляются как корневой элемент `<parsererror>`, а не как выброшенное исключение.
  • Конвенции отображения: `@attr` для атрибутов в стиле Badgerfish, `#text` для смешанного текста, локальное имя элемента для дочерних узлов; Parker отбрасывает атрибуты, Spark сохраняет их в `$`.
  • Повторяющиеся дочерние элементы с одинаковым именем сворачиваются в массив JSON; одиночный дочерний элемент остаётся объектом — классическая неоднозначность «один или много» не имеет решения на стороне XML.
  • Потеряемые возможности: атрибуты (без префикса `@`), пространства имён (`xmlns:foo`), инструкции обработки, комментарии, объявление XML и обёртки CDATA.
  • Смешанное содержимое (`<p>Hello <b>world</b>!</p>`) не может быть обратимо преобразовано в JSON ключ-значение; порядок элементов может быть потерян у потребителей, не сохраняющих порядок ключей.
  • Приведение к числу/булеву значению — осознанный выбор: `<age>30</age>` может стать `30` (число) или `"30"` (строка); ведущие нули (`007`) должны оставаться строками.
  • Форматирование вывода выполняется через `JSON.stringify(value, null, indent)` с отступом в 2 пробела, 4 пробела или `'\t'`; результат — UTF-8 без BOM.

Примеры

Простой элемент

&lt;root>
  &lt;name>John&lt;/name>
&lt;/root>
→
{"root": {"name": "John"}}

Повторяющиеся элементы

&lt;root>
  &lt;item>A&lt;/item>
  &lt;item>B&lt;/item>
&lt;/root>
→
{"root": {"item": ["A", "B"]}}

Вложенная структура

&lt;root>
  &lt;user>
    &lt;name>John&lt;/name>
    &lt;age>30&lt;/age>
  &lt;/user>
&lt;/root>
→
{"root": {"user": {"name": "John", "age": 30}}}

Часто задаваемые вопросы

Как элементы XML отображаются в JSON?

Каждый элемент становится свойством JSON, значение которого — содержимое элемента (строка или вложенный объект). Повторяющиеся элементы с одним именем превращаются в массивы. Атрибуты обычно получают префикс «@» или хранятся под специальным ключом, например «$». Конкретное соглашение варьируется и обычно настраивается.

Почему преобразование XML в JSON иногда теряет данные?

XML различает элементы, атрибуты, текстовое содержимое, смешанное содержимое (текст и элементы), пространства имён, инструкции обработки и комментарии. В JSON есть только объекты, массивы, строки, числа, булевы значения и null. Отображение более богатого дерева XML на JSON теряет информацию о порядке и о различии элемент/атрибут.

Как обрабатывается смешанное содержимое (текст + дочерние элементы)?

Со смешанным содержимым неудобно:

Hello world!

не имеет аккуратного представления в JSON. Обычно страница использует специальный ключ (например, «#text» или «$») для свободного текста, но порядок между текстом и элементами не всегда сохраняется. Избегайте смешанного содержимого, если планируете обратное преобразование.

Что с пространствами имён XML?

Элементы с префиксами (<ns:foo>) превращаются в строковые ключи «ns:foo» либо разделяются на свойства ns/локальное-имя. Объявления xmlns могут сохраняться как свойства-атрибуты или отбрасываться — зависит от настроек страницы.

Можно ли получить из JSON идентичный XML?

В общем случае обратное преобразование без потерь невозможно, особенно для смешанного содержимого, комментариев, инструкций обработки и порядка атрибутов. Для XML с чисто данными (конфиги, простые записи) обратный путь обычно работает. Для документного XML (DocBook, HTML, RSS) используйте настоящий XML-парсер.

Пустой элемент <foo/> — это то же самое, что <foo></foo>?

Да, для парсера. Оба варианта дают свойство foo с пустой строкой или null в качестве значения. Самозакрывающийся синтаксис в XML — чисто косметика.

Преобразование выполняется локально?

Да. Парсинг XML и генерация JSON происходят в вашем браузере. Страница не загружает ваши данные.

Связанные инструменты

Конвертер JSON в XML

Бесплатный онлайн-конвертер JSON в XML с настраиваемым корневым элементом и отступами. Мгновенно конвертируйте JSON-данные в форматированный XML в вашем браузере.

Инструмент форматирования XML

Онлайн-инструмент для форматирования XML с автоматическим отступом, валидацией синтаксиса и сжатием. Настраиваемый отступ, быстрое обнаружение ошибок формата XML.

Инструмент форматирования JSON

Онлайн-инструмент для форматирования JSON с подсветкой синтаксиса, обнаружением ошибок и сжатием. Одним нажатием форматируйте JSON данные, быстро находите ошибки формата.

Конвертер CSV в JSON

Бесплатный онлайн-конвертер CSV в JSON с поддержкой пользовательского разделителя и опцией использования первой строки как заголовка. Быстрая конвертация табличных данных в формат JSON.

Инструмент форматирования YAML

Онлайн-инструмент для форматирования YAML с проверкой синтаксиса, автоматическим отступом и конвертацией формата. Легкая обработка конфигурационных файлов.

Конвертер Excel в JSON

Онлайн конвертер Excel в JSON. Поддерживает форматы .xlsx и .xls с выбором нескольких листов. Конвертируйте данные таблицы в формат JSON локально.