地方在住IT系ニート

bkds

jqコマンドの使い方メモ【JSONの整形・抽出・加工】

はじめに

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
# または
jq . user.json

出力:

[
  {
    "id": 1,
    "name": "Alice",
    "age": 24
  },
  ...
]

JSONの特定キーを抽出する

例: name を取り出す

echo '{"id": 1,"name": "Alice","age": 24}' | jq '.name'

出力:

"Alice"

配列の抽出とループ処理

cat user.json | jq '.[].id'

出力:

1
2
3
4
5

条件抽出

ageが20以上のnameを抽出する例です。

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"
}

キーの削除

del()を使うことでキーを削除できます。

echo '{"id": 1,"name": "Alice","age": 24}' | jq 'del(.age)'

出力:

{
  "id": 1,
  "name": "Alice"
}

複数キーを同時に抽出する

cat user.json | jq '.[] | {name: .name, age: .age}'

出力:

{
  "name": "Alice",
  "age": 24
}
{
  "name": "Bob",
  "age": 30
}
...

curlと組み合わせる

APIのレスポンスをそのままjqで整形するのが定番の使い方です。 JSONPlaceholderはダミーのJSONを返してくれる無料サービスで、登録不要で試すことができます。

# ユーザー一覧を取得して整形
curl -s https://jsonplaceholder.typicode.com/users | jq '.'

# 特定のキーだけ抽出
curl -s https://jsonplaceholder.typicode.com/users | jq '.[].name'

# 条件抽出(idが3以下のユーザー)
curl -s https://jsonplaceholder.typicode.com/users | jq '.[] | select(.id <= 3) | {id: .id, name: .name}'

よく利用するオプション

オプション内容
-rクォーテーションなしで出力
-ccompact表示(1行で出力)
-Sキーをアルファベット順にソートする
-n入力を読まずにnullから処理を開始する
-e結果がfalse/nullの場合に終了コード1を返す

メモ

<-- Back to home
にほんブログ村 IT技術ブログ IT技術メモへ PVアクセスランキング にほんブログ村