Как конвертировать XML в JSON
- Вставьте XML, перетащите файл
.xmlв редактор или загрузите его по URL. JSON появляется по мере ввода. - Настройте префикс атрибутов и ключ для текста и решите, нужно ли всегда использовать массивы, преобразовывать числа и логические значения или игнорировать префиксы пространств имён.
- Скопируйте JSON или скачайте его как файл
.json.
Как XML преобразуется в JSON
| XML | JSON |
|---|---|
<name>Ada</name> | "name": "Ada" |
<price>9.90</price> | "price": 9.90 — цифры сохраняются в точности |
<item id="7">Pen</item> | "item": {"@id": 7, "#text": "Pen"} |
<tag>a</tag><tag>b</tag> | "tag": ["a", "b"] |
<note/> | "note": null |
<![CDATA[a < b]]> | текст "a < b" |
<soap:Body> с опцией Игнорировать префиксы пространств имён | "Body" |
Зачем нужна опция «Всегда использовать массивы»
Элемент, который встречается один раз, становится одиночным значением, а если он встречается дважды — массивом. Коду, который читает такой JSON, приходится обрабатывать оба варианта — классический источник ошибок, когда в списке иногда оказывается всего один элемент. Отметьте Всегда использовать массивы для дочерних элементов, чтобы массивы были везде: структура становится предсказуемой ценой нескольких лишних скобок.
Преобразование XML в JSON в коде
- Python:
xmltodict.parse(text)(пакет xmltodict) - JavaScript:
new XMLParser({ ignoreAttributes: false }).parse(text)(пакет fast-xml-parser) - C#:
JsonConvert.SerializeXmlNode(doc)(Newtonsoft.Json) - Командная строка:
yq -p xml -o json file.xml
Часто задаваемые вопросы
Конвертация проходит без потерь?
Имена элементов, атрибуты и текст сохраняются, а числа — с точностью до цифры. Комментарии, инструкции обработки и положение текста между дочерними элементами (смешанное содержимое) в JSON передать нельзя.
Можно ли конвертировать JSON обратно в XML?
Да, с помощью конвертера JSON в XML на нашем родственном сайте JSON Formatter — он использует те же соглашения @ и #text.
Что происходит с пространствами имён?
По умолчанию имена с префиксами, например soap:Body, сохраняются как ключи, а объявления xmlns выводятся как атрибуты. Отметьте Игнорировать префиксы пространств имён, чтобы получить простые имена вроде Body без объявлений.
Почему значение — строка, а не число?
Значения вроде 007 или 1,000 не являются обычными десятичными числами, поэтому остаются строками, чтобы избежать потери данных. Снимите флажок Преобразовывать числа и true/false, чтобы все значения оставались строками.