Linux jq コマンド

Linux コマンド大全


jq は、軽量で強力なコマンドライン JSON プロセッサです。JSON データを効率的に解析、フィルタリング、変換、フォーマットすることができ、シェルスクリプトでの JSON データ処理に特に適しています。

jq の主な特徴

  • ストリーム処理:JSON データを任意のサイズで処理可能
  • 豊富な演算子:JSON データ構造を処理するための多様な演算子を提供
  • フォーマット出力:JSON 出力を整形して可読性を向上
  • クロスプラットフォーム:Linux、macOS、Windows(WSL 経由)で動作

jq のインストール

ほとんどの Linux ディストリビューションでは、パッケージマネージャーを使って jq を簡単にインストールできます:

例

# Ubuntu/Debian
sudo apt-get install jq

# CentOS/RHEL
sudo yum install jq

# Fedora
sudo dnf install jq

# macOS (Homebrew を使用)
brew install jq

インストールが完了したら、次のコマンドでインストールが成功したか確認できます:

jq --version

基本構文

jq の基本的なコマンド形式は次のとおりです:

jq [options]  [file...]

よく使うオプション引数

オプション 説明
-c コンパクトな出力(整形しない)
-r 生の文字列を出力(JSON の引用符を除去)
-s 入力ストリーム全体を配列として読み込む
-M 色付き出力を無効にする
--arg 変数を定義する
--slurp 複数の JSON オブジェクトを配列として読み込む

よく使う操作例

1. 基本的な JSON 解析

次のような名前のファイルがあるとします:data.jsonそのファイルの内容は次のとおりです:

例

{
  "name": "John Doe",
  "age": 30,
  "isActive": true,
  "address": {
    "street": "123 Main St",
    "city": "New York"
  },
  "hobbies": ["reading", "hiking", "coding"]
}

すべての内容を取得(整形出力):

jq '.' data.json

特定のフィールドを取得:

例

jq '.name' data.json
# 出力:"John Doe"

ネストされたフィールドを取得:

例

jq '.address.city' data.json
# 出力:"New York"

2. 配列操作

配列要素を取得:

例

jq '.hobbies[0]' data.json
# 出力:"reading"

jq '.hobbies[1:3]' data.json
# 出力:["hiking", "coding"]

配列の長さ:

例

jq '.hobbies | length' data.json
# 出力:3

3. 条件フィルタリング

条件を満たす要素を抽出:

例

# users.json にユーザー配列が含まれているとします
jq '.[] | select(.age > 25)' users.json

4. データ変換

新しいオブジェクトを作成:

例

jq '{fullName: .name, city: .address.city}' data.json
# 出力:{"fullName": "John Doe", "city": "New York"}

算術演算:

例

jq '.age * 2' data.json
# 出力:60

5. 複数ファイルの処理

jq -s '.[0] + .[1]' file1.json file2.json

高度な使い方

1. 変数の使用

jq --arg new_city "Boston" '.address.city = $new_city' data.json

2. API レスポンスの処理

curl -s https://api.example.com/users | jq '.[] | {name: .name, email: .email}'

3. 複雑なデータ変換

例

# オブジェクトの配列を CSV 形式に変換
jq -r '["Name", "Age"], (.[] | [.name, .age]) | @csv' users.json

4. エラーハンドリング

例

# try-catch を使用して存在しない可能性のあるフィールドを処理
jq 'try .unknown_field catch "default value"' data.json

実際の活用シナリオ

1. ログ分析

例

# JSON 形式のログファイルを分析
cat app.log | jq 'select(.level == "error") | {time: .timestamp, message: .msg}'

2. 設定処理

例

# 設定ファイル内の特定の値を変更
jq '.config.timeout = 30' config.json > temp.json && mv temp.json config.json

3. データ集計

例

# ユーザーの平均年齢を計算
jq '[.[].age] | add / length' users.json

よくある質問と回答

1. 大規模な JSON ファイルを処理するには?

非常に大きな JSON ファイルの場合は、ストリーム処理を使用できます:

jq -n 'inputs | select(.value > 100)' hugefile.json

2. JSON 内の特殊文字を保持するには?

オプション-rを使用すると、特殊文字がエスケープされます。元のまま出力する必要がある場合は、次のようにします:

jq -j '.' file.json

3. 複数の JSON ファイルを結合するには?

jq -s 'add' file1.json file2.json

まとめ

jq は JSON データを処理する強力なツールです。この記事の学習を通じて、以下の内容を習得したはずです:

  1. jq の基本的なインストールと使用方法
  2. 一般的なデータクエリとフィルタリング操作
  3. 高度なデータ変換と処理テクニック
  4. 実際の活用シナリオでの使用方法

jq のスキルをさらに向上させるには、以下の方法があります:

  • さまざまな複雑な JSON データ構造の処理を練習する
  • jq を自分のシェルスクリプトに統合してみる
  • jq 公式マニュアルを参照して、さらに高度な機能を学ぶ

覚えておいてください。jq を習得すると、コマンドラインで JSON データを処理する効率が大幅に向上します!


Linux コマンド大全

その他の拡張機能