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行で出力するため、ログやシェルスクリプトでの利用に適しています。
  • 公式ドキュメントには豊富な例が掲載されており、困ったときに参照すると良いでしょう。