[jq] setpath で配列として指定したパスの値を設定する
作成日: 2026年10月27日
jq の setpath を使用すると、キー名や配列のインデックスを並べた配列でパスを指定し、その場所に値を設定できます。更新したい値の場所をデータとして扱いたい場合などに利用できます。
下記の例では、users 配列の2番目の要素にある name を "Sakura" に変更しています。
printf '%s\n' '{"users":[{"name":"Taro"},{"name":"Hanako"}]}' |
jq 'setpath(["users",1,"name"]; "Sakura")'
実行結果は下記のとおりです。
{
"users": [
{
"name": "Taro"
},
{
"name": "Sakura"
}
]
}
setpath(パス; 値) の第1引数にパスを表す配列、第2引数に設定する値を指定します。オブジェクトのキー名は文字列、配列のインデックスは数値で指定します。インデックスは 0 から始まるため、1 は2番目の要素を表します。
存在しない階層に値を設定する
パスに含まれるキーが存在しない場合は、必要なオブジェクトを作成して値を設定できます。
printf '%s\n' '{}' | jq 'setpath(["settings","theme"]; "dark")'
実行結果は下記のとおりです。
{
"settings": {
"theme": "dark"
}
}
この例では、空のオブジェクトに settings オブジェクトが作成され、その中の theme に "dark" が設定されています。