Форматы данных
Массивы XML: повторяющиеся элементы, списки и отображение в JSON
В XML нет встроенного литерала массива. Данные в форме списка обычно представлены повторяющимися элементами, часто внутри элемента-контейнера, а конвертер должен решить, когда эти соседи становятся массивом JSON.
Опубликовано
Повторяющиеся элементы представляют элементы списка
Два соседних элемента order образуют естественный список. Их порядок остаётся видимым в XML-документе и естественно отображается в упорядоченный массив JSON.
<orders>
<order id="1"><total>12.50</total></order>
<order id="2"><total>8.00</total></order>
</orders>Отображение повторяющихся соседей в массив JSON
Массив сохраняет каждый повторяющийся order как отдельное значение. Правила атрибутов и определения скалярных типов являются независимыми решениями отображения.
{
"orders": {
"order": [
{ "@attributes": { "id": "1" }, "total": "12.50" },
{ "@attributes": { "id": "2" }, "total": "8.00" }
]
}
}Неоднозначность одного элемента
Конвертер, определяющий массивы только по повторению, может создать объект для первого документа и массив для второго. Принудительно задавайте известные имена элементов, например order, как массивы, если потребителям нужна стабильная схема.
One document: <orders><order id="1"/></orders>
Another: <orders><order id="1"/><order id="2"/></orders>Элементы-контейнеры и непосредственное повторение
| Шаблон | Пример | Компромисс |
|---|---|---|
| Контейнер + элементы | <tags><tag>a</tag></tags> | Ясная граница списка и место для его метаданных |
| Непосредственное повторение | <tag>a</tag><tag>b</tag> | Компактно внутри уже определённого родителя |
| Текст с разделителем | <tags>a,b</tags> | Нет структуры; экранирование и пустые значения зависят от приложения |
Частые ошибки отображения массивов XML
- Изменение типа JSON между объектом и массивом при изменении количества элементов.
- Потеря атрибутов отдельных повторяющихся элементов.
- Разбиение текста по запятым без явного правила словаря.
- Уплощение вложенных списков до подтверждения ожиданий потребителя.
Проверьте пример
Отобразите повторяющиеся order в массив
Два соседних элемента с одинаковым именем естественно образуют массив JSON.
<orders><order id="1"><total>12.50</total></order><order id="2"><total>8.00</total></order></orders>Ожидаемый результат: Ключ order содержит массив из двух объектов в порядке документа.
Проверьте правило массива
Преобразуйте повторяющиеся XML-элементы в JSON
Загрузите список, сравните автоматический режим и принудительные массивы и изучите точную структуру результата.