Обновите одно значение в массиве dicts, используя jq

Я хочу обновить значение в словаре, которое я могу идентифицировать только по другому значению в словаре. То есть, учитывая этот ввод:

[
  {
    "format": "geojson",
    "id": "foo"
  },
  {
    "format": "geojson",
    "id": "bar"
  },
  {
    "format": "zip",
    "id": "baz"
  }
]

Я хочу изменить сопутствующий формат baz на 'csv':

[
  {
    "format": "geojson",
    "id": "foo"
  },
  {
    "format": "geojson",
    "id": "bar"
  },
  {
    "format": "csv",
    "id": "baz"
  }
]

Я обнаружил, что это работает:

jq 'map(if .id=="baz" then .format="csv" else . end)' my.json

Но это кажется довольно многословным, поэтому мне интересно, есть ли более элегантный способ выразить это. jq, похоже, отсутствует какой-то селектор выражений, эквивалентом которого может быть [@id='baz'] в xpath.

(Когда я начал этот вопрос, у меня было [.[] |...], потом я обнаружил map, так что все не так плохо, как я думал.)


person Steve Bennett    schedule 21.04.2015    source источник


Ответы (1)