修改数组中的一个值

Modify one value in array

这与

非常相似

我有一个 foo.json,我想将 AAA 更新为 AAA-MY-SUFFIX。 基本上,我想得到当前值(AAA),然后给它加上一个后缀。

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

根据上一个问题,我可以用这个替换 AAA 的值:

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

但我想在现有值上附加一个后缀,而不是完全替换它。

类似这样的东西(但当然行不通):

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

我觉得我很接近,但我能弄明白:(

经过一番折腾,我想我明白了:

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

确实关闭。您可以简单地将 .Value + "-MY_SUFFIX" 替换为

. + "-MY_SUFFIX"

或者更好的是,使用 +=,如:... += "-MY_SUFFIX"

就个人而言,我会使用过滤器:

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

(实际上,使用后缀 "-MY-SUFFIX" 更符合规定的要求 :-)