Я хочу обновить значение в словаре, которое я могу идентифицировать только по другому значению в словаре. То есть, учитывая этот ввод:
[
{
"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
, так что все не так плохо, как я думал.)