Конвертер JSON ↔ XML
JSONПреобразование между JSON и XML. Вложенные объекты оборачиваются в настраиваемый корневой элемент.
На этой странице
Что такое конвертер JSON ↔ XML?#
JSON и XML — два разных способа записать структурированные данные, и на уровне синтаксиса они не взаимозаменяемы: один использует фигурные скобки и квадратные, другой — теги в угловых скобках. Конвертер между ними ничего не «сжимает» и не «кодирует»; он переизлагает то же самое дерево значений в другой нотации, чтобы система, говорящая только на XML, могла принять данные, пришедшие в JSON, и наоборот.
Соответствие в основном механическое, но имеет два известных острых угла. Во-первых, XML требует ровно один корневой элемент, оборачивающий всё, тогда как JSON спокойно допускает на верхнем уровне голый объект или массив, — поэтому переход от JSON к XML всегда означает выбор имени для этой внешней обёртки. Во-вторых, XML-элементы могут нести атрибуты (<a id="7">), для которых в JSON нет нативного эквивалента; распространённое соглашение — прятать их под ключами с префиксом @, а любой текст, живущий рядом с атрибутами, — под ключом #text.
Эта страница конвертирует в обоих направлениях прямо в браузере: JSON в XML (оборачивая значение под именованным корневым элементом) и XML в JSON (распаковывая атрибуты в @-ключи и по умолчанию срезая внешний корень, чтобы вернуть внутреннее значение).
Как пользоваться#
- Выберите направление переключателем JSON → XML / XML → JSON в левом верхнем углу панели инструментов.
- Введите или вставьте текст в панель Ввод слева.
- JSON → XML ожидает корректный JSON. Любое значение верхнего уровня оборачивается под корневым элементом.
- XML → JSON ожидает корректный (well-formed) XML-документ. Единственный внешний элемент разворачивается автоматически, поэтому вы получаете его внутреннее содержимое как JSON.
- В режиме JSON → XML задайте поле Корневой элемент (по умолчанию
root) — имя тега-обёртки, напримерuser,feed,response. XML требует единственный корень, поэтому это имя всегда обязательно. - Результат появляется в реальном времени в панели Вывод. Нажмите Копировать, чтобы забрать его.
- Пример загружает небольшой документ, подходящий для текущего направления; Очистить сбрасывает обе панели.
Ключевые возможности#
- Оба направления в одном инструменте. Один переключатель меняет направление между 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, не проверяет по схеме и не подгружает внешние сущности — обработка локальная и только по тексту, что также означает: безопасно вставлять документы, которым вы не полностью доверяете.