Tips
サンプルJSONデータを作成
`jq` は、コマンドラインでJSONデータを柔軟に操作するための軽量で強力なプロセッサです。複雑なJSON構造から必要な情報だけを抽出したり、整形して表示したり、変換したりする際に非常に役立ちます。ログ解析、APIレスポンスの確認、設定ファイルの編集などで日常的に活用できます。
技術・言語・ツール: jq
jq は、コマンドラインでJSONデータを柔軟に操作するための軽量で強力なプロセッサです。複雑なJSON構造から必要な情報だけを抽出したり、整形して表示したり、変換したりする際に非常に役立ちます。ログ解析、APIレスポンスの確認、設定ファイルの編集などで日常的に活用できます。
JSONデータをコマンドラインで華麗に操る jq の基本
jq を使うと、ネストされたJSONデータから特定のフィールドを抽出したり、配列をフィルタリングしたり、複数の要素を組み合わせて新しいJSONを作成したりといった操作が、パイプとシンプルなクエリで実現できます。シェルスクリプトやCI/CDパイプラインでのデータ処理にも最適です。
# サンプルJSONデータを作成
cat <<EOF > data.json
{
"users": [
{
"id": 1,
"name": "Alice",
"email": "alice@example.com",
"status": "active"
},
{
"id": 2,
"name": "Bob",
"email": "bob@example.com",
"status": "inactive"
},
{
"id": 3,
"name": "Charlie",
"email": "charlie@example.com",
"status": "active"
}
],
"meta": {
"version": "1.0",
"timestamp": "2023-10-27T10:00:00Z"
}
}
EOF
# 全ユーザーの名前だけを抽出
cat data.json | jq '.users[].name'
# 出力:
# "Alice"
# "Bob"
# "Charlie"
# アクティブなユーザーのIDと名前を抽出
cat data.json | jq '.users[] | select(.status == "active") | {id, name}'
# 出力:
# {
# "id": 1,
# "name": "Alice"
# }
# {
# "id": 3,
# "name": "Charlie"
# }
# メタ情報とアクティブなユーザーの数を組み合わせた新しいJSONを作成
cat data.json | jq '{meta: .meta, active_users_count: (.users | map(select(.status == "active")) | length)}'
# 出力:
# {
# "meta": {
# "version": "1.0",
# "timestamp": "2023-10-27T10:00:00Z"
# },
# "active_users_count": 2
# }
注意点やおすすめポイント:
jqのクエリは非常に強力で、フィルタリング、マッピング、オブジェクトの作成、算術演算など、JavaScriptライクな操作が可能です。-rオプション(raw output)を使うと、文字列を引用符なしで出力でき、他のコマンドへのパイプ処理に便利です。-cオプション(compact output)は、JSONを1行で出力するため、ログやシェルスクリプトでの利用に適しています。- 公式ドキュメントには豊富な例が掲載されており、困ったときに参照すると良いでしょう。