Руководство по конвертации XML и JSON: Трансформация файлов конфигурации и форматов данных API
Ключевые различия: XML vs JSON
| Характеристика | XML | JSON |
|---|---|---|
| Формат данных | Разметка на основе тегов | Пары ключ-значение |
| Атрибуты | Да (<node attr="val">) |
Нет (атрибуты становятся полями) |
| Пространства имён | Да (xmlns) |
Нет |
| Комментарии | Да (<!-- -->) |
Нет |
| Массивы | Неявные (повторяющиеся элементы) | Явные ([]) |
| Текстовые узлы | Смешанное содержимое (теги + текст) | Простые строковые значения |
XML лучше для документо-ориентированных данных (SVG, HTML, конфигурации). JSON лучше для структурированных данных (ответы API).
Как атрибуты XML отображаются в JSON
Элементы XML могут иметь как атрибуты, так и текстовое содержимое — это сложная часть конвертации:
Простой элемент
<person name="John" age="30"/>
{
"person": {
"@name": "John",
"@age": "30"
}
}
Соглашение: используйте префикс
@для атрибутов XML. Это самое распространённое правило конвертации.
Смешанное содержимое (Атрибуты + Текст)
<price currency="USD">68.00</price>
{
"price": {
"@currency": "USD",
"#text": "68.00"
}
}
Используйте
#textдля текстового содержимого элемента, чтобы отличить его от атрибутов.
Определение массивов: Самая распространённая проблема
В XML массивы неявные — повторяющиеся элементы с одинаковым именем образуют массив:
<books>
<book>Three-Body Problem</book>
<book>To Live</book>
</books>
{
"books": {
"book": ["Three-Body Problem", "To Live"]
}
}
Проблема: С одним элементом XML не может отличить его от не-массива:
<books>
<book>Three-Body Problem</book>
</books>
Это может быть конвертировано в:
{
"books": {
"book": "Three-Body Problem"
}
}
Решение: В инструменте XML↔JSON отметьте «Принудительный массив» и укажите, какие элементы всегда должны обрабатываться как массивы.
Обработка пространств имён
Пространства имён XML не имеют прямого эквивалента в JSON:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<m:GetPrice xmlns:m="http://example.com">
<m:Item>123</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
Распространённые стратегии:
| Стратегия | Описание | Случай использования |
|---|---|---|
| Сохранить префикс | soap:Body → "soap:Body" |
Обработка SOAP/WSDL |
| Удалить префикс | soap:Body → "Body" |
Простые случаи, без конфликтов |
| Ключ пространства имён | {soap}Body |
Нужно различать одноимённые элементы из разных пространств имён |
Используйте Форматирование XML для приведения в порядок XML перед конвертацией.
Использование инструмента XML↔JSON
Шаг 1: Откройте инструмент
Посетите инструмент XML↔JSON и выберите направление конвертации.
Шаг 2: Введите исходные данные
- XML → JSON: Вставьте строку XML
- JSON → XML: Вставьте строку JSON
Вы можете сначала отформатировать ввод с помощью Форматирования JSON или Форматирования XML.
Шаг 3: Настройте параметры конвертации
| Параметр | Описание |
|---|---|
| Префикс атрибута | Отображать атрибуты как @attr или $attr |
| Ключ текстового узла | Отображать текстовое содержимое как #text или _text |
| Принудительный массив | Указать имена элементов, которые всегда должны быть массивами |
| Пространства имён | Сохранить / удалить / преобразовать |
Шаг 4: Выполните конвертацию
Нажмите «Конвертировать», проверьте результат и скопируйте.
Практические сценарии
Миграция файлов конфигурации
Многие устаревшие проекты используют XML-конфигурации (Spring, Maven). Новые проекты предпочитают YAML/JSON:
pom.xml → package.json (информация о зависимостях)
spring-config.xml → application.json (конфигурация Bean)
SOAP API в REST
Ответы SOAP — это XML; их нужно конвертировать в JSON для использования во фронтенде:
XML-ответ SOAP → JSON → рендеринг фронтенда
Извлечение метаданных SVG
SVG — формат XML; извлеките метаданные в JSON для программной обработки:
<svg width="100" height="100"> → {"svg": {"@width": "100", "@height": "100"}}
Особенности конвертации JSON в XML
При конвертации JSON в XML обратите внимание:
| Особенность | Описание |
|---|---|
| Корневой элемент | JSON должен иметь один корневой ключ |
| Допустимость имени ключа | Имена XML-тегов не могут начинаться с цифры или содержать пробелы |
| Обёртка массивов | Массивам JSON нужно имя элемента-обёртки |
| Специальные символы | <, >, & должны быть экранированы как сущности |
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| Одиночный элемент не конвертирован в массив | XML не может отличить одиночный элемент от массива | Отметьте «Принудительный массив» |
| Атрибуты потеряны | Правила конвертации без префикса атрибута | Проверьте настройку префикса атрибута |
| Конфликт пространств имён | Одноимённые элементы в разных пространствах имён | Сохраните префиксы пространств имён |
| Ошибка JSON в XML | Недопустимое имя ключа | Переименуйте ключ в соответствии со спецификацией XML |
| Смешанное содержимое потеряно | Ключ текстового узла некорректно сопоставлен | Проверьте конфигурацию #text |
Итоги
Конвертация XML↔JSON — распространённая потребность при миграции форматов данных и интеграции API. Понимание трёх ключевых проблем — сопоставления атрибутов, определения массивов и пространств имён — является ключом к корректной конвертации. Инструмент XML↔JSON предоставляет гибкие параметры конвертации, а Форматирование JSON и Форматирование XML дополняют ваш рабочий процесс конвертации форматов.