Поиск по сайту:

Как преобразовать XML в JSON в командной строке


XML сложен, и его синтаксический анализ довольно сложен, даже при использовании языков сценариев. К счастью, есть утилита, которая может конвертировать XML в JSON, с которой проще работать как в скриптах, так и в командной строке.

Используйте утилиту xq

Вы захотите использовать для этого специально созданную утилиту, а не пытаться анализировать ее с помощью чего-то вроде регулярного выражения, что является плохой идеей. Для этой задачи идеально подходит утилита под названием xq. Он устанавливается вместе с yq, который работает с YAML. Вы можете установить yq из pip:

pip install yq

Внутри этой утилиты используется jq для работы с JSON, поэтому вам нужно скачать двоичный файл и переместить его куда-нибудь в PATH (/usr/local/bin/  должно работать нормально).

Теперь вы сможете анализировать ввод XML, передавая его в xq:

cat xml | xq .

Оператор . означает, что вы хотите преобразовать весь XML в JSON. Здесь вы можете использовать полный синтаксис jq для выбора подэлементов, о которых вы можете прочитать в нашем руководстве.

Вы также можете вывести ответ xq в виде XML с флагом -x:

xq -x

Это позволяет использовать синтаксис выбора jq для анализа XML, сохраняя его в форме XML. Хотя похоже, что обратное преобразование невозможно, так как xq по-прежнему требуется синтаксис XML.

Одна проблема с преобразованием XML в JSON

Преобразование XML в JSON не является идеальным — в XML порядок элементов может иметь значение, а ключи могут дублироваться. Такой документ, как:

<e>
  <a>some</a>
  <b>textual</b>
  <a>content</a>
</e>

Произойдет ошибка при прямом переводе в JSON, поскольку ключ a существует дважды. Таким образом, он преобразуется в массив, что нарушает порядок. xq возвращает следующий вывод для этого бита XML:

{
  "e": {
    "a": [
      "some",
      "content"
    ],
    "b": "textual"
  }
}

Что технически правильно, просто не идеально во всех ситуациях. Вы захотите перепроверить и убедиться, что ваше преобразование XML не имеет проблем.