XML ⇄ JSON Converter
Bidirectional XML ↔ JSON with attribute handling, CDATA preservation, BOM, line-ending, and indent control
Input
Output
XML ⇄ JSON Converter
Bidirectional XML ↔ JSON with attribute handling, CDATA preservation, BOM, line-ending, and indent control
Features
- Режим автоопределения определяет, является ли вставленный текст XML или JSON, и запускает конвертацию в обратном направлении — вставляйте любую сторону без ручной смены режима
- Две стратегии атрибутов: режим «Префикс» выдаёт атрибуты XML с настраиваемым префиксом (по умолчанию `@`) как соседние ключи JSON; режим «Объект» собирает их в отдельный объект `$`, так что текст элемента и атрибуты никогда не сталкиваются
- Обработка CDATA и текстовых узлов: при включённом «Считать CDATA/Текст как #text» текстовое содержимое элемента сворачивается в свойство `#text`; смешанное содержимое выживает после round-trip; выключено сохраняет структурное различие
- Переключатель pretty-print с выбираемым отступом (2 / 4 / 8 пробелов) для JSON- и XML-вывода — включено для человеческого чтения, выключено для компактной передачи
- Управление окончанием строк (LF vs CRLF) для совместимости Unix vs Windows, плюс необязательный переключатель UTF-8 BOM для систем, требующих метку порядка байтов
- Настраиваемый префикс атрибутов соответствует соглашениям ниже по цепочке: `@` (по умолчанию), `_`, `xml:` или любая другая строка — конвертированный вывод drop-in совместим с вашим пайплайном
- «Копировать» и «Скачать» (`converted.txt`) одним кликом для вывода; ошибки конвертации возникают встроенно с сообщением парсера — вы знаете, был ли XML некорректным или JSON непредставим как XML
- Полностью на стороне клиента: парсинг через встроенный DOMParser для XML и JSON.parse для JSON. Сетевых вызовов нет, работает офлайн после кеширования страницы
How to use
- Вставьте ваш XML или JSON в панель «Ввод». При режиме «Автоопределение» конвертер определяет формат автоматически.
- Настройте переключатель Pretty и размер отступа для управления форматом; переключайте Окончание строки между LF и CRLF по необходимости.
- Откройте «Дополнительные настройки», чтобы выбрать Режим атрибутов (Префикс или Объект), задать Префикс атрибутов и переключить CDATA/Текст-#text.
- Нажмите «Конвертировать». Панель «Вывод» показывает результат; конвертация работает в браузере через DOMParser + JSON.parse.
- Используйте «Копировать», чтобы поместить результат в буфер обмена, или «Скачать», чтобы сохранить как `converted.txt`.
- Если парсинг не удался, встроенная строка ошибки покажет нижележащее сообщение — исправьте ввод и сконвертируйте заново.
Tips & Best Practices
- При отладке XML-нагрузки SOAP-сервиса автоопределение + режим атрибутов «Объект» + CDATA-#text дают самый чистый JSON-вид.
- Установите Окончание строки в CRLF и включите BOM при генерации вывода для legacy-инструментов Windows.
- Смените префикс атрибутов с `@` на `_`, если ваши JSON-потребители отвергают ключи, начинающиеся с `@` (некоторые парсеры на базе YAML так делают).
- Если JSON-в-XML вывод ставит элементы в неправильном порядке, перевставьте топ-уровневые ключи в исходном JSON в нужной последовательности.
- Сочетайте с JSON Formatter для дальнейшей инспекции или преобразования конвертированного JSON; XML Formatter на стороне XML.
FAQ
Как Режим атрибутов меняет JSON-вывод?
В режиме «Префикс» атрибуты XML появляются как соседние ключи с настроенным префиксом — `<user id="42"/>` становится `{ "user": { "@id": "42" } }`. В режиме «Объект» атрибуты собираются под одним ключом `$`, так что содержимое элемента и атрибуты не делят пространство имён. Выберите «Префикс», когда потребители ожидают плоские ключи; «Объект» — когда нужно однозначно вернуть атрибуты в XML.
Зачем нужен CDATA-как-#text?
XML имеет два способа нести текст — `<a>plain</a>` и `<a><![CDATA[plain]]></a>`. При включённой опции обе формы схлопываются в ключ `#text` в JSON; смешанное содержимое вроде `<p>Привет <b>мир</b></p>` выживает round-trip. Выключено сохраняет структурное различие; полезно, когда оригинальные CDATA-маркеры семантически значимы (например, встроенные скрипты).
Зачем переключатель BOM?
Некоторые Windows-инструменты (Excel, старый PowerShell, .NET TextReader без явной кодировки) ожидают UTF-8 BOM (`EF BB BF`) в начале файла. Современные веб-инструменты и Unix-конвейеры обычно считают BOM шумом. Включайте переключатель для BOM-чувствительного Windows-инструмента, выключайте для остального.
Почему LF против CRLF?
Windows-инструменты и старые форматы Microsoft ожидают `\r\n` (CRLF); Unix/Linux/macOS используют `\n` (LF) по умолчанию. Git обычно нормализует оба, но артефакты, обходящие git (загрузки, вставки в Блокнот, выходы сборки), нуждаются в явном выборе. Парсер автоопределения игнорирует окончания строк; этот контроль влияет только на вывод.
Сохраняются ли пространства имён при конвертации?
Имена элементов и атрибутов с префиксом пространства имён выживают как литеральные строки (например, `xmlns:soap` становится ключом `@xmlns:soap`). Конвертер не разрешает пространства имён против URI — если нижестоящий пайплайн требует разрешения, сделайте этот шаг отдельно. Round-trip обратно в XML сохраняет начальные префиксы.
Что происходит с пустыми элементами?
Пустой XML-элемент `<a/>` становится `{ "a": null }` в JSON (или `{ "a": "" }`, если был `<a></a>` с пустым текстом и CDATA-#text включен). При движении из JSON в XML значение `null` выдаёт самозакрывающийся элемент. Round-trip стабилен, пока вы не переключаете настройку CDATA-#text между направлениями.
Почему мой JSON-в-XML вывод имеет упорядоченные ключи?
XML-элементы имеют определённый порядок; JavaScript-объекты сохраняют порядок вставки для строковых ключей, поэтому конвертер пишет элементы в порядке, в котором их ключи появились в JSON. Если JSON пришёл из round-trip JSON.parse, порядок совпадает с источником; построено программно — управляйте порядком, вставляя ключи в нужной последовательности.
Безопасно ли конвертировать большие документы в этой вкладке?
Документы среднего мегабайтного размера конвертируются менее чем за секунду. Очень большие (>10 МБ) работают, но удерживают UI-поток в течение парсинга; для такой нагрузки запускайте ту же логику в Web Worker или скрипте сборки. Сервис конвертации одинаков в обоих контекстах.