Tips

サンプルJSONデータを作成

`jq` は、JSONデータをコマンドラインで柔軟に処理するための軽量で強力なパーサーです。JSONファイルを整形したり、特定のフィールドを抽出したり、複雑なフィルタリングや変換を行うのに役立ちます。APIのレスポンスやログデータの解析に非常に便利です。

技術・言語・ツール: jq

jq は、JSONデータをコマンドラインで柔軟に処理するための軽量で強力なパーサーです。JSONファイルを整形したり、特定のフィールドを抽出したり、複雑なフィルタリングや変換を行うのに役立ちます。APIのレスポンスやログデータの解析に非常に便利です。

コマンドラインでJSONを華麗に操る jq の基本

jq は、JSONのフィルタリング、マッピング、変換を行うためのツールで、シェルスクリプトやパイプラインと組み合わせて使うことで、JSONデータを効率的に処理できます。基本的な使い方から、少し複雑な操作まで、いくつかの例を見てみましょう。

# サンプルJSONデータを作成
echo '{"name": "Alice", "age": 30, "city": "New York", "hobbies": ["reading", "hiking"]}' > person.json

# 1. JSONを整形して表示 (pretty-print)
cat person.json | jq .

# 2. 特定のキーの値を取得
cat person.json | jq .name
# 出力: "Alice"

# 3. 複数のキーの値をオブジェクトとして取得
cat person.json | jq '{name: .name, age: .age}'
# 出力:
# {
#   "name": "Alice",
#   "age": 30
# }

# 4. 配列要素の取得 (hobbiesの最初の要素)
cat person.json | jq .hobbies[0]
# 出力: "reading"

# 5. 配列の各要素に対して操作(例: 大文字化)
echo '["apple", "banana", "cherry"]' | jq 'map(ascii_upcase)'
# 出力:
# [
#   "APPLE",
#   "BANANA",
#   "CHERRY"
# ]

# 6. 条件に基づいてフィルタリング
echo '[{"id": 1, "status": "active"}, {"id": 2, "status": "inactive"}, {"id": 3, "status": "active"}]' | jq '.[] | select(.status == "active")'
# 出力:
# {
#   "id": 1,
#   "status": "active"
# }
# {
#   "id": 3,
#   "status": "active"
# }

# 7. curlと組み合わせてAPIレスポンスを整形・抽出
# 例: GitHubのユーザー情報を取得し、名前とURLを抽出
# curl -s https://api.github.com/users/octocat | jq '{name: .name, url: .html_url}'

注意点やおすすめポイント:

  • jq は非常に柔軟性が高く、複雑なクエリも記述できます。最初は少し構文に慣れが必要かもしれませんが、慣れると手放せなくなります。
  • jq のクエリは、JSONデータを変換するための「プログラム」のようなものです。. は入力全体のことを指し、パイプ (|) を使って複数のフィルタを連結することで、複雑な処理も段階的に記述できます。
  • jq の公式ドキュメントやオンラインプレイグラウンド(jqplay.orgなど)を活用すると、実際のJSONデータで試しながら学習できるため、習得が早まります。
  • curlhttpie などと組み合わせてWeb APIのデバッグやデータ確認に活用すると、開発効率が大幅に向上します。例えば、curl ... | jq . はよく使われるイディオムです。