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データで試しながら学習できるため、習得が早まります。curlやhttpieなどと組み合わせてWeb APIのデバッグやデータ確認に活用すると、開発効率が大幅に向上します。例えば、curl ... | jq .はよく使われるイディオムです。