ユーザー視点を重視したWebサイト・Webシステムの企画、制作会社
シンク株式会社

お気軽にお問い合わせください

お問い合わせフォーム
シンク株式会社
シンク株式会社
menu

jqというJSONプロセッサーがすばらしすぎる

jq_banner jq_banner

JSONはプログラムでは扱いやすいですが、複雑な構造になり配列の要素が多数になると人間が読み解くのは難しい。コマンドラインで grep や awk を使って必要なところだけ取り出すのもなかなかに面倒です。テキストファイルのように手軽にJSONを扱えないか。
jq はそんなもやもやを一気に解決してくれるコマンドラインの神ツールです。

手始め

jqのオフィシャルサイトに行けば、Linux, Windows, Mac などの各種OS用バイナリーを配布しているので、ダウンロードしてパスの通ったディレクトリに置けば、インストールは完了。

ダウンロードしたままでは実行フラグがついてないので chmod +x bin/jq などお忘れなく。

JSONファイルをコマンド引数に指定するか、標準入力から読み込ませて実行できます。第一引数として jq のコマンドを渡します。

最初の「.」はルートを意味し、続けてプロパティーを指定すれば、その値が出力されます。

「,」で続ければ、左から順に実行されます。

使い方は簡単。しかし、jq のありがたみはもっと複雑なJSONオブジェクトでこそ実感できます。

実際のWeb APIレスポンスで使ってみる

楽曲データベースのMusicBrainzのJSONデータを使ってみましょう。

curl などでリクエストして標準入力から読み込ませてもいいのですが、ムダにネットのトラフィックを増やしてもあれなので、ファイルに保存しましょう。

中を覗いてもそのままではわけわかりませんw

構造のわからないJSONデータには、jq の type や keys といったコマンドが役に立ちます。

ルートはオブジェクトだとわかり、キーのリストが得られました。いくつかキーの値を見てみましょう。

「-」文字がプロパティー名中に使えないのは JavaScript と同じです。そういう場合は連想配列の添字(.[“キー名”])を代りに使いましょう。

さて、曲リストはどこにあるんでしょうか?
実は、.media を掘っていくとあります。jqコマンドでは「|」でつないで、実行結果に対してさらにコマンドを実行できます。シェルのパイプ(|)みたいなものですね。

おお! 曲名が見つかりました。曲のリストは.tracks のインデックスを外せば得られます。

配列に対しては自動的に処理ループしてくれるんですね! ここが jq のすごいところ。

「Blue in Green」の曲順はいくつでしょうか? select() という組込み関数を使えば一発です。

曲順と曲名のオブジェクト配列で返してみましょう。やはり組込み関数 map() を使います。配列をフィルターする強力な関数です。

select() と組み合わせて、最初の3曲だけ返してみましょう。

いかがでしょう? ものすごく直感的に使えますよね。

起動オプションもいろいろ用意されており、よく使うのは -r(値の出力で引用符をつけない)や -c(コンパクトな出力形式)でしょうか。

jq のオフィシャルサイトにはドキュメントも充実しており、起動オプションの説明や他の組み込み関数の使用例も豊富にあります。目を通してみると強力すぎて感涙です。

さらに、次バージョン(1.5系)の開発も進んでいて RC1 のようです。このバージョンでは正規表現検索や置換、日付処理などの組込み関数が多数導入されているようです。GitHubでバイナリ配布もしているので興味のある方は、そちらもどうぞ。

ホームページの新規構築やリニューアル、アプリ開発など
気になることやお困りのこと何でもお気軽にご相談ください。

お問い合わせフォーム

PAGETOP