jq コマンド

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

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

インストール

Ubuntuでは

sudo apt install -y jq

(Ubuntu 20.04 で確認)

CentOSでは

sudo yum install -y jq

(CentOS 8 で確認)

基本的な使い方

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 '.["foo"][0]'
"abc"

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

オプション

-C
デフォルトではカラーで表示してくれるが、lessコマンドなどパイプをつなげるとカラー表示してくれない。しかしこのオプションを付ければカラー表示を強制してくれる。
-M
カラー表示を無効にする
-r
文字列の場合に "" で囲まずに直接出力
-S
オブジェクトの中のキーをソートする

色付きでlessで見るには

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

curl -s 'http://www.gaitameonline.com/rateaj/getrate' | jq -C . | less -R
このサイトは個人メモの集合です。
スポンサーリンク