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 shownpm v (いずれもエイリアスで中身は同じ) コマンドを使うと、対象のパッケージの情報をまるっと取得できる。コレも jq を使って欲しい情報だけ取得できたりする。

# Lodash のリリースされているバージョン情報だけ取得する
$ npm info lodash --json | jq '.versions'

npm info の場合、通常返却されるデータは Valid な JSON データではないので、--json オプションを付けてやる。

Playground あるよ

jq の公式サイト上に、コマンドを試せるページがあった。

「JSON」欄に適当な JOSN データを置き、「Filter」欄にフィルタ文字列を書いていけば、「Result」欄に結果が出力される。

以上

jq コマンド、お手軽だが強力。