Linux jq コマンド
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
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"]
}
"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"
# 出力:"John Doe"
ネストされたフィールドを取得:
例
jq '.address.city' data.json
# 出力:"New York"
# 出力:"New York"
2. 配列操作
配列要素を取得:
例
jq '.hobbies[0]' data.json
# 出力:"reading"
jq '.hobbies[1:3]' data.json
# 出力:["hiking", "coding"]
# 出力:"reading"
jq '.hobbies[1:3]' data.json
# 出力:["hiking", "coding"]
配列の長さ:
例
jq '.hobbies | length' data.json
# 出力:3
# 出力:3
3. 条件フィルタリング
条件を満たす要素を抽出:
例
# users.json にユーザー配列が含まれているとします
jq '.[] | select(.age > 25)' users.json
jq '.[] | select(.age > 25)' users.json
4. データ変換
新しいオブジェクトを作成:
例
jq '{fullName: .name, city: .address.city}' data.json
# 出力:{"fullName": "John Doe", "city": "New York"}
# 出力:{"fullName": "John Doe", "city": "New York"}
算術演算:
例
jq '.age * 2' data.json
# 出力:60
# 出力: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
jq -r '["Name", "Age"], (.[] | [.name, .age]) | @csv' users.json
4. エラーハンドリング
例
# try-catch を使用して存在しない可能性のあるフィールドを処理
jq 'try .unknown_field catch "default value"' data.json
jq 'try .unknown_field catch "default value"' data.json
実際の活用シナリオ
1. ログ分析
例
# JSON 形式のログファイルを分析
cat app.log | jq 'select(.level == "error") | {time: .timestamp, message: .msg}'
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
jq '.config.timeout = 30' config.json > temp.json && mv temp.json config.json
3. データ集計
例
# ユーザーの平均年齢を計算
jq '[.[].age] | add / length' users.json
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 データを処理する強力なツールです。この記事の学習を通じて、以下の内容を習得したはずです:
- jq の基本的なインストールと使用方法
- 一般的なデータクエリとフィルタリング操作
- 高度なデータ変換と処理テクニック
- 実際の活用シナリオでの使用方法
jq のスキルをさらに向上させるには、以下の方法があります:
- さまざまな複雑な JSON データ構造の処理を練習する
- jq を自分のシェルスクリプトに統合してみる
- jq 公式マニュアルを参照して、さらに高度な機能を学ぶ
覚えておいてください。jq を習得すると、コマンドラインで JSON データを処理する効率が大幅に向上します!
その他の拡張機能