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 jqapt install jq など)。