[jq] map で配列の各要素を変換する

作成日: 2026年09月21日

jq の map を使用すると、配列の各要素に同じ処理を適用して新しい配列を作成できます。

下記の例では、配列の各数値を2倍にします。

echo '[1,2,3]' | jq 'map(. * 2)'

実行結果は下記のとおりです。

[
  2,
  4,
  6
]

map(. * 2) の . には配列の各要素が順番に渡されます。元の配列は変更せず、変換後の要素を持つ新しい配列が出力されます。

オブジェクト配列のプロパティを変換する

map は、オブジェクトの配列に含まれる各オブジェクトのプロパティを変換する場合にも使用できます。

下記の例では、各オブジェクトの score に 10 を加算します。

echo '[{"name":"Taro","score":80},{"name":"Hanako","score":90}]' | jq 'map(.score += 10)'

実行結果は下記のとおりです。

[
  {
    "name": "Taro",
    "score": 90
  },
  {
    "name": "Hanako",
    "score": 100
  }
]

map(.score += 10) では、配列の各要素であるオブジェクトが . に渡され、そのオブジェクトの score プロパティだけを書き換えています。

map_values との違い

似たフィルターに map_values がありますが、処理対象が異なります。

  • map: 配列の各要素に処理を適用します。
  • map_values: オブジェクトの各値に処理を適用します。

例えば、次のようなオブジェクト自体の値を変換する場合は map_values を使用します。

echo '{"apple":100,"banana":200}' | jq 'map_values(. * 2)'

実行結果は下記のとおりです。

{
  "apple": 200,
  "banana": 400
}

オブジェクトの配列を処理する場合は map、1つのオブジェクトに含まれる値をまとめて処理する場合は map_values と使い分けます。

jq