XML ⇄ JSON конвертер
Двостороння конвертація XML ↔ JSON з обробкою атрибутів, збереженням CDATA, BOM, закінченням рядків та керуванням відступами
Введення
Вивід
XML ⇄ JSON конвертер
Двостороння конвертація XML ↔ JSON з обробкою атрибутів, збереженням CDATA, BOM, закінченням рядків та керуванням відступами
Можливості
- Режим автовизначення розпізнає, чи вставлений текст є 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. Без мережевих викликів, працює офлайн після кешування сторінки
Як використовувати
- Вставте свій XML або JSON у панель «Введення». При режимі «Автовизначення» конвертер визначає формат автоматично.
- Налаштуйте перемикач Pretty та розмір відступу для керування форматуванням; перемикайте Закінчення рядка між LF та CRLF, як того вимагають ваші інструменти нижче за потоком.
- Відкрийте «Розширені налаштування», щоб вибрати Режим атрибутів («Префікс» або «Обʼєкт»), задати Префікс атрибутів та перемкнути CDATA/Текст-#text.
- Клацніть «Конвертувати». Панель «Вивід» показує результат; конвертація працює у вашому браузері через DOMParser + JSON.parse.
- Використайте «Копіювати» для буфера обміну або «Завантажити», щоб зберегти як `converted.txt`.
- Якщо розбір не вдався, інлайн-рядок помилки показує базове повідомлення — виправте введення та сконвертуйте знову.
Поради та найкращі практики
- При налагодженні XML-навантаження з SOAP-сервісу автовизначення + режим атрибутів «Обʼєкт» + CDATA-#text дають найчистіший вид JSON.
- Встановіть Закінчення рядка на CRLF та активуйте BOM при генерації виводу, призначеного для застарілих інструментів Windows.
- Змініть Префікс атрибутів з `@` на `_`, якщо ваші споживачі JSON відхиляють ключі, що починаються з `@` (деякі парсери на основі YAML так роблять).
- Якщо JSON-у-XML вивід ставить елементи в неправильному порядку, перевставте свої ключі верхнього рівня в джерельний JSON у потрібній послідовності.
- Поєднуйте з JSON Formatter, коли хочете далі перевіряти або трансформувати конвертований JSON; XML Formatter на боці XML.
Запитання та відповіді
Як Режим атрибутів змінює 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 або скрипті часу збірки. Сервіс конвертації однаковий в обох контекстах.