Tips
全体を整形して出力
`jq`は、JSONデータをコマンドラインで柔軟に処理するための軽量で強力なツールです。複雑なJSON構造から必要な情報だけを抽出したり、整形したり、変換したりする際に非常に役立ちます。APIレスポンスの解析や設定ファイルの編集など、日常の開発作業を効率化します。
jq
jqは、JSONデータをコマンドラインで柔軟に処理するための軽量で強力なツールです。複雑なJSON構造から必要な情報だけを抽出したり、整形したり、変換したりする際に非常に役立ちます。APIレスポンスの解析や設定ファイルの編集など、日常の開発作業を効率化します。
JSONデータを効率的に抽出・整形する jq の基本
jqを使うことで、パイプ (|) を使って他のコマンドの出力(例えば curl のレスポンス)を直接処理できます。これにより、不要な情報をフィルタリングし、必要なデータだけを整形して表示することが可能です。
コード例
以下のJSONデータをdata.jsonとして保存するか、echoでパイプに渡して試してみてください。
{
"user": {
"id": 123,
"name": "Alice Developer",
"email": "alice@example.com",
"roles": ["admin", "user"],
"settings": {
"theme": "dark",
"notifications": true
}
},
"projects": [
{"id": 1, "name": "Project Alpha", "status": "active"},
{"id": 2, "name": "Project Beta", "status": "inactive"}
]
}
# 全体を整形して出力
cat data.json | jq .
# userオブジェクトのnameフィールドを抽出
cat data.json | jq '.user.name'
# 出力: "Alice Developer"
# userオブジェクトのemailとrolesを抽出 (オブジェクトとして)
cat data.json | jq '{email: .user.email, roles: .user.roles}'
# 出力:
# {
# "email": "alice@example.com",
# "roles": ["admin", "user"]
# }
# projects配列の全てのプロジェクト名を抽出
cat data.json | jq '.projects[].name'
# 出力:
# "Project Alpha"
# "Project Beta"
# projects配列からstatusが"active"のプロジェクトのみを抽出
cat data.json | jq '.projects[] | select(.status == "active")'
# 出力:
# {
# "id": 1,
# "name": "Project Alpha",
# "status": "active"
# }
# (応用例) curlと組み合わせてGitHub APIから情報を取得
# GitHubのユーザー名 'octocat' のnameとblog情報を取得
# curl -s https://api.github.com/users/octocat | jq '{name: .name, blog: .blog}'
注意点やおすすめポイント
jqは非常に強力で、さらに複雑な条件分岐、ループ、算術演算なども可能です。公式ドキュメントには豊富な例が載っています。- ワンライナーで複雑なJSON処理を行えるため、スクリプト作成時の生産性向上に貢献します。
- APIのデバッグやログ解析の際に、
curlや他のCLIツールと組み合わせて使うことで、必要な情報だけを素早く確認できます。 - インストールが簡単で、多くの環境で利用可能です (
brew install jqやapt install jqなど)。