jq コマンド

JSON形式のデータを見やすく表示したり、データを抽出したりするコマンド。

$ echo '{"name": "taro", "age": 30, "sex": "male"}' | jq .
{
  "sex": "male",
  "age": 30,
  "name": "taro"
}

JSON全体を単に見やすく表示するツールであれば json_pp というツールもある。

インストール

Ubuntuでは

sudo apt-get install jq

(Ubuntu 13.10, 14.04 で確認)

基本的な使い方

JSON全体を表示。

$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq .
{
  "bar": {
    "い": 20,
    "あ": 10
  },
  "foo": [
    "abc",
    "def"
  ],
  "age": 30,
  "name": "taro"
}

要素を取得。

$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq '.["name"]'
"taro"

こうも書ける。省略の記法なのかな。

$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq .name
"taro"

-r オプションを付けると、結果が文字列の場合にJSON形式ではなく、文字列を直接出力してくれる。

$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq -r .name
taro

要素がまた構造を持っていても大丈夫。

$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq '.["foo"]'
[
  "abc",
  "def"
]
$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq '.["bar"]'
{
  "い": 20,
  "あ": 10
}

要素の要素を取得。

$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq '.["foo"][0]'
"abc"
$ echo '{"name": "taro", "age": 30, "foo": ["abc", "def"], "bar": {"あ":10, "い":20}}' | jq '.["bar"]["あ"]'
10

オプション

-C
デフォルトではカラーで表示してくれるが、lessコマンドなどパイプをつなげるとカラー表示してくれない。 しかしこのオプションを付ければカラー表示を矯正してくれる。
-M
カラー表示を無効にする

色付きでlessで見るには

-C を付けてカラー表示を矯正させ、lessコマンドでは -R オプションを付けてエスケープシーケンスを有効にするとよい。

curl -s 'http://www.gaitameonline.com/rateaj/getrate' | jq -C . | less -R
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。