地方在住IT系ニート

bkds

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表示
  • jqsedawk より JSON には向いています
<-- Back to home
にほんブログ村 IT技術ブログ IT技術メモへPVアクセスランキング にほんブログ村