Изменить одно значение в массиве - PullRequest
0 голосов
/ 17 сентября 2018

Это ОЧЕНЬ похоже на Обновление одного значения в массиве dicts, используя jq

У меня есть файл foo.json, и я хочу обновить AAA до AAA-MY-SUFFIX. По сути, я хочу получить текущее значение (AAA), а затем добавить к нему суффикс.

[ { "Key": "Name", "Value": "awesome" }, { "Key": "role", "Value": "AAA" } ]

Из предыдущего вопроса я могу ЗАМЕНИТЬ значение ААА, используя это:

cat foo.json | jq '(.[] | select(.Key == "role") | .Value) |= "-MY_SUFFIX"'

Но я хочу добавить суффикс к существующему значению, а не заменить его полностью.

Примерно так (но, конечно, это не работает):

cat tags.json | jq '(.[] | select(.Key == "role") | .Value) |= .Value + "-MY_SUFFIX"'

Я чувствую, что я ТАК близко, но я просто могу это понять: (

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Закрыть действительно.Вы можете просто заменить .Value + "-MY_SUFFIX" на

. + "-MY_SUFFIX"

Или еще лучше использовать +=, например: ... += "-MY_SUFFIX"

Лично я бы использовал фильтр:

map(if .Key == "role" then .Value += "-MY_SUFFIX" else . end)

(На самом деле заявленные требования лучше соответствовали бы суффиксу "-MY-SUFFIX": -)

0 голосов
/ 17 сентября 2018

После долгого дурачения, я думаю, я понял:

cat tags.json | jq '(.[] | select(.Key == "role") | .Value) |= (. + "- MY_SUFFIX")'
...