Как преобразовать 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 не имеет проблем.