jqコマンドを使い方集
jq
はJSONデータを操作するためのコマンドラインツールです。以下に基本的な使用例をいくつか紹介します。
1. JSONデータの整形(Pretty Print)
jq
を使うと、JSONデータを見やすく整形することができます。
Copied!!echo '{"name": "Alice", "age": 25, "city": "Tokyo"}' | jq
出力Copied!!{ "name": "Alice", "age": 25, "city": "Tokyo" }
2. 特定のキーの値を抽出
JSONデータから特定のフィールドだけを取り出す場合に使います。
Copied!!echo '{"name": "Alice", "age": 25, "city": "Tokyo"}' | jq '.name'
出力Copied!!"Alice"
3. ネストされたデータの操作
ネストされたJSONデータの場合、ドットでつなげてアクセスできます。
Copied!!echo '{"user": {"name": "Alice", "age": 25}}' | jq '.user.name'
出力Copied!!"Alice"
4. 配列の要素を取得
JSON配列のデータを扱うことも簡単です。以下の例では、最初の要素を取得しています。
Copied!!echo '[{"name": "Alice"}, {"name": "Bob"}, {"name": "Charlie"}]' | jq '.[0].name'
出力Copied!!"Alice"
5. 条件付きでデータをフィルタリング - select
条件を指定してデータをフィルタリングすることも可能です。
Copied!!echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq '.[] | select(.age > 25)'
出力Copied!!{ "name": "Bob", "age": 30 }
6. 複数フィールドの出力
複数のフィールドを同時に表示したい場合、{}
を使います。
Copied!!echo '{"name": "Alice", "age": 25, "city": "Tokyo"}' | jq '{name, city}'
出力Copied!!{ "name": "Alice", "city": "Tokyo" }
7. データの加工・変更
jq
を使ってJSONデータを変更することもできます。
Copied!!echo '{"name": "Alice", "age": 25}' | jq '.age += 1'
出力Copied!!{ "name": "Alice", "age": 26 }
mapの使用例
1. 配列内の各要素を変換する
配列の各要素に処理を適用して、新しい配列を作成します。
例
各要素に対して1を加算する場合:
Copied!!echo '[1, 2, 3, 4]' | jq 'map(. + 1)'
出力Copied!![2, 3, 4, 5]
2. 配列のオブジェクトの特定のフィールドを取り出す
オブジェクトの配列から特定のフィールドだけを取り出す場合に使えます。
例
name
フィールドだけを取り出す場合:
Copied!!echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq 'map(.name)'
出力Copied!!["Alice", "Bob"]
3. 条件付きで値を変換する
map
を使って、条件を満たす要素だけを変換することが可能です。
例
年齢が30以上のユーザーのage
フィールドを+1する場合:
Copied!!echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq 'map(if .age >= 30 then .age += 1 else . end)'
出力Copied!![ { "name": "Alice", "age": 25 }, { "name": "Bob", "age": 31 } ]
4. mapとselectを組み合わせる
select
と組み合わせることで、条件に合致した要素のみを変換した配列を作成することができます。
例
年齢が30以上の人の名前を抽出:
Copied!!echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq 'map(select(.age >= 30) | .name)'
出力Copied!!["Bob"]
5. ネストされた配列の各要素にアクセス
ネストされた配列に対してmap
を使うことで、さらにネストされた構造にアクセスできます。
例
ネストされた配列の中にあるscore
フィールドにアクセスして、すべての値を+10する場合:
Copied!!echo '[{"name": "Alice", "scores": [80, 90]}, {"name": "Bob", "scores": [70, 85]}]' | jq 'map({"name": .name,"scores": .scores | map(. + 10)})'
出力Copied!![ { "name": "Alice", "scores": [90, 100] }, { "name": "Bob", "scores": [80, 95] } ]