XML ⇄ JSON
Вставьте любой из форматов — другой появится по мере ввода, в обе стороны.
Как пользоваться
- Вставьте XML или JSON в поле — результат рисуется по мере ввода, кнопки нет. Направление определяется по первому символу (< для XML, [ или { для JSON) и показывается над результатом, чтобы вы могли проверить.
- Если направление угадано неверно, выберите XML → JSON или JSON → XML. Параметры ниже меняются вместе с направлением: для XML → JSON показывается «Определять числа и логические значения», а для JSON → XML — «Имя корня» для обёртки массивов.
- Скопируйте или скачайте результат. Оба варианта используют ровно тот текст, что на экране; файл называется data.json или data.xml. «Загрузить пример» подставляет пример для активного направления.
Пример
Ввод (XML)
<note id="1"><to>Анна</to><from>Борис</from><body>Привет!</body></note>
Результат (JSON)
{ "note": { "@id": "1", "to": "Анна", "from": "Борис", "body": "Привет!" } }
Атрибут id становится «@id», каждый дочерний элемент становится ключом, а текст внутри <body> — строковым значением. Отключите «Определять числа и логические значения», чтобы каждое значение — включая id — оставалось текстом.
Правила, ограничения и известные проблемы
- Ни загрузки файлов, ни перетаскивания, ни запросов по URL: текст нужно вставить. Зона перетаскивания отняла бы высоту, нужную результату, а честное чтение файлов требует поддержки кодировок, отличных от UTF-8 — откройте файл в форматировании XML (GB18030, Big5, Windows-1256) и скопируйте текст.
- Ввод ограничен 1 000 000 символов; свыше 200 000 результат ждёт, пока вы перестанете печатать, и сообщает об этом. Выше жёсткого предела вы получаете явную ошибку — ввод никогда не обрезается молча.
- Сопоставление намеренно фиксированное: элемент становится объектом; атрибут — «@name»; текст элемента — «#text»; дочерний элемент — ключом; а несколько дочерних с одним именем — массивом. Листовой элемент с одним текстом становится простой строкой, поэтому глубоко вложенный документ остаётся читаемым.
- Определение типов (XML → JSON) осторожно: в настоящие типы преобразуются только true / false / null (только в нижнем регистре) и строгие числа JSON. Целое с ведущим нулём (00501) и число из 16 и более цифр остаются строкой; всё остальное остаётся текстом, когда переключатель выключен. Атрибуты всегда остаются текстом и никогда не перетипизируются, потому что атрибуты XML текстовые.
- JSON → XML требует единого корня, поэтому объект верхнего уровня использует свой единственный ключ как корневой элемент. У массива JSON верхнего уровня нет единого корня, поэтому он оборачивается в элемент «Имя корня», а каждый элемент становится повторяющимся дочерним (по умолчанию «item»).
- Значением JSON под ключом может быть объект, массив, строка, число, true / false или null. Ключи «@name» становятся атрибутами (null / undefined пропускаются); «#text» становится текстом элемента; любой другой ключ — дочерним элементом. Массивы дают повторяющиеся элементы.
- Комментарии XML, инструкции обработки (<? … ?>) и DOCTYPE отбрасываются и подсчитываются (в JSON их представить нельзя); CDATA сохраняется как текст. Смешанное содержимое — текст рядом с дочерними элементами — сплющивается в «#text», и его исходный порядок не сохраняется; затронутые элементы подсчитываются, чтобы вы это видели.
- JSON разбирается строго: ни комментариев, ни лишних запятых, ни одинарных кавычек, ни неэкранированных управляющих символов, вложенность до 64 уровней. Один объект на строку (JSON Lines) не принимается — сначала оберните объекты в массив.
- Ссылки на сущности XML (& < >) сохраняются в тексте и атрибутах дословно (не декодируются), поэтому обратное преобразование воспроизводит ровно те же байты. Экранирование добавляется на стороне JSON → XML: & < > экранируются в тексте, а " — в значениях атрибутов.
- Вне области: XSLT, XPath, проверка по схеме XML, пространства имён иначе как часть имени тега, JSON с повторяющимися ключами (побеждает последний, как в JSON.parse) и сохранение порядка комментариев. Ничего не отправляется, не сохраняется и не попадает в URL.
Похожие инструменты
Что обычно нужно дальше, когда данные уже в другом формате.