jqコマンドのメモ
はじめに
jqは、JSONの整形・抽出加工するためのコマンドです。 APIのレスポンスやログ、設定ファイルなどにJSONがよく利用されます。 こういったJSONを活用するための方法をまとめました。
インストール
各OSで利用されるパッケージマネージャーからインストールができます。
macOS
brew install jq
Linux
sudo apt-get update
sudo apt-get install jq
Windows
winget install jqlang.jq
基本的な使い方
これから基本的な使い方をサンプルデータと一緒に確認していきます。
今回利用するサンプルデータは下記のuser.jsonです。
[
{"id": 1,"name": "Alice","age": 24},
{"id": 2,"name": "Bob","age": 30},
{"id": 3,"name": "Charlie","age": 28},
{"id": 4,"name": "Diana","age": 22},
{"id": 5,"name": "Edward","age": 35}
]
JSONの整形 (Pretty Print)
json形式のテキストに対してjqを利用すると整形して見やすく表示できます。
cat user.json | jq
or
jq . user.json
出力:
[
{
"id": 1,
"name": "Alice",
"age": 24
},
{
"id": 2,
"name": "Bob",
"age": 30
},
{
"id": 3,
"name": "Charlie",
"age": 28
},
{
"id": 4,
"name": "Diana",
"age": 22
},
{
"id": 5,
"name": "Edward",
"age": 35
}
]
JSONの特定キーを抽出する
例: name を取り出す
echo '{"id": 1,"name": "Alice","age": 24}' | jq '.name'
出力:
"Alice"
配列の抽出とループ処理
cat user.json | jq '.[].id'
出力:
1
2
3
4
5
条件抽出
cat user.json | jq '.[] | select(.age > 20) | .name'
出力:
"Alice"
"Bob"
"Charlie"
"Diana"
"Edward"
CSV形式に変換
cat user.json | jq -r '.[] | [.name, .age] | @csv'
出力:
"Alice",24
"Bob",30
"Charlie",28
"Diana",22
"Edward",35
キー追加
echo '{"id": 1,"name": "Alice","age": 24}' | jq '. + { "role": "admin" }'
出力:
{
"id": 1,
"name": "Alice",
"age": 24,
"role": "admin"
}
よく利用するオプション
| オプション | 内容 |
|---|---|
-r |
クォーテーションなしで出力 |
-c |
compact 表示 |
-S |
key をソートする |
メモ
.は現在のオブジェクトを表す.[]は配列を展開するselect()はフィルタリングに利用@csv,@tsv,@htmlなどフォーマット変換が便利- APIレスポンスの解析には
curl -s URL | jqが定番 - 大量データ解析は
jq -cでcompact表示 jqはsedやawkより JSON には向いています
