気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

JSON用のgrepみたいなjqコマンド

JSONを便利に編集できるjqコマンドできる基礎的なことを書いておきます。

マニュアル、参考URL

公式マニュアルをみておくと幸せになれる。
jq Manual (development version)

ここに書いていることでメモしておきたいことを書いていきます。
jq コマンドを使う日常のご紹介 - Qiita

コマンド使い方

.がルート{}を表します。

整形

% echo '{"items":[{"item_id":1,"name":"たろう"},{"item_id":2,"name":"はなこ"}]}' \
| jq .

{
  "items": [
    {
      "item_id": 1,
      "name": "たろう"
    },
    {
      "item_id": 2,
      "name": "はなこ"
    }
  ]
}

列取得

% echo '{"items":[{"item_id":1,"name":"たろう"},{"item_id":2,"name":"はなこ"}]}' 
| jq '.items[]..name'   
"たろう"
"はなこ"

# ダブルコートを消すには -r をつける
% echo '{"items":[{"item_id":1,"name":"たろう"},{"item_id":2,"name":"はなこ"}]}' \   [14:48:38]
| jq -r '.items[].name'
たろう
はなこ

フィルタ(パイプみたいなもの)

'.items[]'までの結果を.nameへ渡す。

% echo '{"items":[{"item_id":1,"name":"たろう"},{"item_id":2,"name":"はなこ"}]}' \   [14:48:44]
| jq -r '.items[] | .name'
たろう
はなこ

パイプの後で編集

項目の順序やプロパティー名を変更、配列にしたりなど

% echo '{"items":[{"item_id":1,"name":"たろう"},{"item_id":2,"name":"はなこ"}]}' \   [14:50:27]
| jq -r '.items[] | {name2: .name, item_id2: .item_id}'
{
  "name2": "たろう",
  "item_id2": 1
}
{
  "name2": "はなこ",
  "item_id2": 2
}

他にもいろいろありそうだけど、一旦ここまで。