[jq] walk でネストした JSON の数値をまとめて変換する
作成日: 2026年10月26日
jq の walk を使用すると、JSON の値を再帰的に処理できます。配列やオブジェクトが複数の階層にネストしている場合でも、各値に同じフィルターを適用できます。
下記の例では、JSON 内の数値をすべて2倍にしています。
printf '%s\n' '{"name":"Taro","score":10,"history":[20,{"score":30}],"active":true,"note":null}' |
jq 'walk(if type == "number" then . * 2 else . end)'
実行結果は下記のとおりです。
{
"name": "Taro",
"score": 20,
"history": [
40,
{
"score": 60
}
],
"active": true,
"note": null
}
walk は、配列の要素やオブジェクトの値を再帰的に処理した後、配列やオブジェクト自体にも指定したフィルターを適用します。
この例では、type == "number" で数値かどうかを確認し、数値の場合だけ . * 2 で2倍にしています。それ以外は else . でそのまま返すため、文字列・真偽値・null と、配列やオブジェクトの構造が保持されます。