Форматы данных

Массивы 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

Загрузите список, сравните автоматический режим и принудительные массивы и изучите точную структуру результата.

Перейти в XML to JSON Converter →