IZN Tools

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

Конвертация в обе стороны с сохранением атрибутов.

XML
JSON
Ожидание ввода
Посчитано на вашем устройстве

В чём несовпадение

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

Конвертер делает три явных выбора:

| XML | JSON | | --- | --- | | Атрибут | ключ с префиксом @ | | Текст рядом с атрибутами | ключ #text | | Повторяющееся имя элемента | массив |

Комментарии и инструкции обработки отбрасываются: в JSON их некуда положить.

Ловушка повторяющихся элементов

Ответ с одним элементом даёт объект, тот же ответ с двумя — массив. Код, написанный под случай с одним элементом, ломается на втором — классическая авария в проде. Если вы потребляете преобразованный XML, приводите значение к массиву перед использованием — всегда.

Всё остаётся локально

Документ разбирает ваш браузер, поэтому выгрузка с записями клиентов или данными счетов до сервера не доходит.

Вопросы

Как представлены атрибуты?+

С префиксом @: атрибут currency становится ключом @currency рядом с #text для собственного текста элемента. Без префикса атрибут мог бы столкнуться с дочерним элементом того же имени, и результат зависел бы от порядка в документе — ровно тот баг, который всплывает через месяцы.

Почему один элемент стал массивом, а другой нет?+

Потому что в XML нет понятия списка: два соседних тега с одним именем — это просто два элемента. Когда имя повторяется, конвертер выдаёт массив; когда встречается один раз — значение. Если потребителю нужна стабильная форма, приводите её сами: это свойство отображения, а не выбор.

Можно преобразовать JSON обратно в XML?+

Да, переключите направление. У объекта должен быть ровно один ключ верхнего уровня, потому что в XML ровно один корневой элемент. Ключи, начинающиеся с @, становятся атрибутами, #text — текстом элемента.

Какой используется парсер?+

Встроенный DOMParser браузера. Он обрабатывает пространства имён, сущности, CDATA и объявления кодировки так, как предписывает спецификация, — самописный парсер в веб-странице этого не сделает.