コマンドラインでXMLをJSONに変換する方法
XMLは複雑であり、スクリプト言語を使用しても、ネイティブに解析するのはかなり難しいです。しかし、XMLをJSONに変換できるユーティリティがあるため、スクリプトやコマンドラインの両方で作業しやすくなります。
xqユーティリティを使用してください
これにはカスタムメイドのユーティリティを使用する方が良いでしょう。正規表現のようなもので解析しようとするのは悪い考えです。このタスクに最適なユーティリティは xq という名前です。これは一緒にインストールされます。
yqYAMLに対応しているものです。インストールできます。
yqpipから:
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変換に問題がないか、二重確認する必要があります。
