紅孔雀 このページをアンテナに追加 RSSフィード

2015-01-03

Linux コマンドで HTML/XML/JSON を整形する

Linux コマンドで HTML/XML/JSON を整形 (pretty print) する方法を調べました。

色々方法はあるようですが、以下のものが使えそうだったので試してみました。

  • HTML/XML の整形: xmllint, tidy
  • JSON の整形: python (json.tool), jq

結論としては、どれもまずまず使えました。

注意点としては、入力データが変更される可能性があるということです。例えば「開発中の API の結果をデバッグする」という目的の場合は、整形後のデータだけを見て確認したつもりになってはダメ、ということです。

xmllint で HTML/XML を整形する

xmllint を使ってみます。パッケージからインストールします。

$ sudo apt-get install xmllint

実行します。

$ echo '<html><head><title>テスト</title></head><body><h1>テスト</h1></body></html>' | xmllint --format --encode utf-8 -
<?xml version="1.0" encoding="utf-8"?>
<html>
  <head>
    <title>テスト</title>
  </head>
  <body>
    <h1>テスト</h1>
  </body>
</html>

<?xml ... ?> が補完されました。あと、--html というオプションがあったのですが、指定すると日本語が数値参照に置換されてしまったので付けるのをやめました。

tidy で HTML/XML を整形する

次は tidy を使ってみます。こちらもパッケージからインストールします。

$ sudo apt-get install tidy

実行します。

$ echo '<html><head><title>テスト</title></head><body><h1>テスト</h1></body></html>' | tidy -i -utf8 -xml 2> /dev/null
<html>
  <head>
    <title>テスト</title>
  </head>
  <body>
    <h1>テスト</h1>
  </body>
</html>

標準エラーに警告などが色々出力されたので、標準エラーだけ /dev/null にリダイレクトしました。

python (json.tool) で JSON を整形する

実行します。

$ echo '{"message":"hello", "values":[1,2,3]}' | python -mjson.tool
{
    "message": "hello",
    "values": [
        1,
        2,
        3
    ]
}

良い感じですね。

jq で JSON を整形する

パッケージでインストールします。

$ sudo apt-get install jq

実行します。

$ echo '{"message":"hello", "values":[1,2,3]}' | jq '.'
{
  "values": [
    1,
    2,
    3
  ],
  "message": "hello"
}

入力データと意味的には同じですが、要素の順序が変わりました。

jq は JSON の整形だけではなく、JSON に対してフィルターを掛けるなどの処理もできるようです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/benikujyaku/20150103/1420218205