jq を使って JSON データを整形・抽出する
jq
というコマンドをインストールすると、コマンドライン上で JSON データを整形したり、特定のプロパティを抜き出したりしてくれる。コマンドライン上で JSON データが抜群に扱いやすくなるので紹介。
目次
インストール方法
Mac の場合は Homebrew を使って以下のようにインストールできる。
$ brew install jq
$ jq --version
jq-1.5
Windows の場合は Chocolatey を使うと簡単にインストールできる。
> choco install jq
> jq --version
jq-1.5
使い方
jq
コマンドによって、JSON データを整形して色付け表示でき、特定のプロパティをフィルタリングしたりできる。
例1 : GitHub API
例えば GitHub API の取得結果は、元々改行等が入っていて可読性は高いが、これに更に色付けして可読性を高めたりできる。
$ curl -sS 'https://api.github.com/users/Neos21/repos' | jq '.'
jq
コマンドを素通しする時は '.'
と書く。コレが基本形。
curl -sS
オプションで、パイプで渡す出力内容に余計な行が入らないようにしている。jq
コマンドは受け取った内容が正しい JSON データでないとパースできないからだ。
以前やった git clone
用の URL を一気に取得するのも、以下のようにフィルタリングしてやるとサクッと取得できた。
$ curl -sS 'https://api.github.com/users/Neos21/repos?per_page=100' | jq '.[].clone_url'
例2 : npm info
npm info
、もしくは npm show
・npm v
(いずれもエイリアスで中身は同じ) コマンドを使うと、対象のパッケージの情報をまるっと取得できる。コレも jq
を使って欲しい情報だけ取得できたりする。
# Lodash のリリースされているバージョン情報だけ取得する
$ npm info lodash --json | jq '.versions'
npm info
の場合、通常返却されるデータは Valid な JSON データではないので、--json
オプションを付けてやる。
Playground あるよ
jq
の公式サイト上に、コマンドを試せるページがあった。
「JSON」欄に適当な JOSN データを置き、「Filter」欄にフィルタ文字列を書いていけば、「Result」欄に結果が出力される。
以上
jq
コマンド、お手軽だが強力。