Инструменты
Руководства

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

JSON

Преобразование между JSON и XML. Вложенные объекты оборачиваются в настраиваемый корневой элемент.

100 % на клиенте Без бэкенда
Ввод
Вывод
На этой странице

Что такое конвертер JSON ↔ XML?#

JSON и XML — два разных способа записать структурированные данные, и на уровне синтаксиса они не взаимозаменяемы: один использует фигурные скобки и квадратные, другой — теги в угловых скобках. Конвертер между ними ничего не «сжимает» и не «кодирует»; он переизлагает то же самое дерево значений в другой нотации, чтобы система, говорящая только на XML, могла принять данные, пришедшие в JSON, и наоборот.

Соответствие в основном механическое, но имеет два известных острых угла. Во-первых, XML требует ровно один корневой элемент, оборачивающий всё, тогда как JSON спокойно допускает на верхнем уровне голый объект или массив, — поэтому переход от JSON к XML всегда означает выбор имени для этой внешней обёртки. Во-вторых, XML-элементы могут нести атрибуты (<a id="7">), для которых в JSON нет нативного эквивалента; распространённое соглашение — прятать их под ключами с префиксом @, а любой текст, живущий рядом с атрибутами, — под ключом #text.

Эта страница конвертирует в обоих направлениях прямо в браузере: JSON в XML (оборачивая значение под именованным корневым элементом) и XML в JSON (распаковывая атрибуты в @-ключи и по умолчанию срезая внешний корень, чтобы вернуть внутреннее значение).

Как пользоваться#

  1. Выберите направление переключателем JSON → XML / XML → JSON в левом верхнем углу панели инструментов.
  2. Введите или вставьте текст в панель Ввод слева.
    • JSON → XML ожидает корректный JSON. Любое значение верхнего уровня оборачивается под корневым элементом.
    • XML → JSON ожидает корректный (well-formed) XML-документ. Единственный внешний элемент разворачивается автоматически, поэтому вы получаете его внутреннее содержимое как JSON.
  3. В режиме JSON → XML задайте поле Корневой элемент (по умолчанию root) — имя тега-обёртки, например user, feed, response. XML требует единственный корень, поэтому это имя всегда обязательно.
  4. Результат появляется в реальном времени в панели Вывод. Нажмите Копировать, чтобы забрать его.
  5. Пример загружает небольшой документ, подходящий для текущего направления; Очистить сбрасывает обе панели.

Ключевые возможности#

  • Оба направления в одном инструменте. Один переключатель меняет направление между JSON-в-XML и XML-в-JSON, причём панель ввода перенацеливается автоматически.
  • Настраиваемый корневой элемент. Поскольку XML не существует без единственного внешнего элемента, вы задаёте имя обёртки; конвертор выполняет оборачивание для любой структуры верхнего уровня JSON.
  • Корректная XML-декларация. Вывод JSON-в-XML начинается со стандартного пролога <?xml version="1.0" encoding="UTF-8"?> и красиво печатается с двухпробельным отступом.
  • Атрибуты проходят обратный путь. XML-в-JSON сохраняет атрибуты элементов под ключами с префиксом @, а текст рядом с атрибутами — под #text, поэтому ничего не отбрасывается молча.
  • Числовой разбор. В XML всё — текст; парсер возвращает значения элементов, похожие на числа, обратно в JSON-числа (поэтому <age>36</age> становится 36, а не "36").

Разбор примера#

JSON → XML#

С направлением JSON → XML и корнем root загрузите Пример:

{
  "name": "Ada",
  "age": 36,
  "skills": ["math", "logic"]
}

Конвертер оборачивает всё под <root> и разворачивает массив так, как требует XML, — каждый элемент становится собственным элементом с тем же тегом:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name>Ada</name>
  <age>36</age>
  <skills>math</skills>
  <skills>logic</skills>
</root>

Поменяйте поле Корневой элемент на person, и обёртка станет <person> / </person> — внутренняя структура не изменится.

XML → JSON#

Переключитесь на XML → JSON и загрузите Пример:

<?xml version="1.0"?>
<root><name>Ada</name><age>36</age></root>

Внешний <root> срезается, а внутренние элементы становятся свойствами JSON, причём 36 распознаётся как число:

{
  "name": "Ada",
  "age": 36
}

Атрибуты тоже сохраняются. Элемент вида <a id="7">label</a> даёт { "@id": "7", "#text": "label" } — атрибут живёт под @id, текст под #text, и ничего не теряется.

FAQ#

Почему мой JSON-массив превращается в повторяющиеся XML-элементы, а не в одну обёртку с элементами внутри?#

Так XML представляет список: конструкции «массив» там нет, поэтому каждый элемент обязан быть собственным элементом с тем же именем тега. JSON-массив ["math", "logic"] под ключом skills становится двумя соседними элементами <skills>, а не одним <skills> с дочерними. Это стандартное, дружественное к схемам соответствие — его и ожидают XML-потребители.

В XML → JSON куда делся мой внешний элемент?#

Конвертер автоматически разворачивает единственный корень. XML требует ровно один элемент верхнего уровня, но в JSON эта обёртка обычно избыточна — <root><name>Ada</name></root> не несёт в root ничего, что нужно JSON. Срезая её, вы получаете непосредственно значимое внутреннее значение. Если вам действительно нужно сохранить корень, держите его как обычный элемент и обращайтесь к нему по имени.

Почему 36 — число, а не строка?#

В XML нет отдельного числового типа — всё между тегами это текст. Парсер применяет числовое приведение, поэтому элемент, чей текст похож на число (36, 3.14), возвращается как JSON-число. Это удобно для типичных данных, но означает и то, что значение вроде кода товара <code>007</code> потеряет лидирующие нули — храните такие значения как атрибуты или принимайте их как строки.

Может ли инструмент преобразовать любой XML-документ?#

Корректный (well-formed) XML — да, включая пространства имён в тегах, атрибуты, самозакрывающиеся элементы и декларации. Он не разрешает DTD, не проверяет по схеме и не подгружает внешние сущности — обработка локальная и только по тексту, что также означает: безопасно вставлять документы, которым вы не полностью доверяете.