jqいいわ
今更jqに触れた。
DigitalOceanのimage idを調べたいんだけど...
packerのDigitalOcean builderを指定していたとき、image_idを指定したいのだけれど知りたいためにはAPIを叩かないといけない。
叩くのはいいんだけどJSONで結果が返ってくる。
pretty-printしない場合
curl -X GET "https://api.digitalocean.com/images/?client_id={ユーザーのclient_id}&api_key={ユーザーのapi_key}
ウッつらい…これ人間が読むものじゃないよな...
pretty-printしたい場合
jqコマンドに対して、APIのレスポンスをパイプでつないでやると...
curl -X GET "https://api.digitalocean.com/images/?client_id={ユーザーのclient_id}&api_key={ユーザーのapi_key} | jq '.'
美しい...綺麗で見やすい。
これだけじゃアレなんで
パイプで結果をつないでいけるので簡単なの試してみた。
curl -X GET "https://api.digitalocean.com/images/?client_id={ユーザーのclient_id}&api_key={ユーザーのapi_key} " | jq '.images | .[] | if .distribution == "Ubuntu" then .distribution, .name, .id else "" end'
- 出力されたJSONをフィルタリング
- .imagesの中身を取り出す
- arrayに入ってるので展開
- distribution key が "Ubuntu"であれば、distribution, name, id それぞれの中身を出す。なければ空文字("")を表示する。
結果
うむむ
and
, or
, not
, ==
など、評価結果についてBoolean(true or false)を返すのがアレで、
真だったらtrue
じゃなく評価した値を返してくれるようにすると
多段フィルタリング可能なんじゃないかなーとか思ったりする。
if文がelse節必須なのもだるさが...
言語向けのバインディング
Python向けのjq.pyを見つけた。
が、以下の理由でインストール試してない...
環境はMac OS X 10.8.4。
- setup.pyで指定しているファイル名にtypoがある (PRしといた)
- (setup.pyを修正した上で)Python 3.3.2でインストールできない
- (setup.pyを修正した上で)Python 2.7.5でインストールできない
うーむ。
Haskellバージョンが有る...
ブランチ見てたらhaskell-versionとかある。
実装のためのプロトタイプはHaskellで組んだのかなこれ...
総評
jqいいですね。