[jq] getpath で配列として指定したパスの値を取得する
作成日: 2026年10月27日
jq の getpath を使用すると、キー名や配列のインデックスを並べた配列でパスを指定し、ネストした値を取得できます。取得したい値の場所をデータとして扱いたい場合などに利用できます。
下記の例では、users 配列の2番目の要素から name の値を取得しています。
printf '%s\n' '{"users":[{"name":"Taro"},{"name":"Hanako"}]}' |
jq 'getpath(["users",1,"name"])'
実行結果は下記のとおりです。
"Hanako"
["users",1,"name"] は、users キー、インデックス 1、name キーの順にたどるパスです。オブジェクトのキー名は文字列、配列のインデックスは数値で指定します。インデックスは 0 から始まるため、1 は2番目の要素を表します。
パスを変数で渡す
--argjson でパスを jq の変数に渡し、getpath の引数として使うこともできます。
printf '%s\n' '{"users":[{"name":"Taro"},{"name":"Hanako"}]}' |
jq --argjson lookup_path '["users",0,"name"]' 'getpath($lookup_path)'
実行結果は下記のとおりです。
"Taro"
この例では、JSON 配列を変数 $lookup_path に渡しています。パスに含まれるインデックスが 0 なので、users 配列の1番目の要素にある name を取得しています。