[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 と、配列やオブジェクトの構造が保持されます。

参考

jq