[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 を取得しています。

参考

jq