这非常类似于Update one value in array of dicts, using jq
我有一个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"'
我觉得我太近了,但是我可以弄清楚:(
答案 0 :(得分:2)
确实关闭。您只需将.Value + "-MY_SUFFIX"
替换为
. + "-MY_SUFFIX"
或更妙的是,使用+=
,例如:... += "-MY_SUFFIX"
我个人会使用过滤器:
map(if .Key == "role" then .Value += "-MY_SUFFIX" else . end)
(实际上,陈述的要求最好使用后缀"-MY-SUFFIX"
:-)
答案 1 :(得分:1)
经过很多鬼混,我想我明白了
cat tags.json | jq '(.[] | select(.Key == "role") | .Value) |= (. + "- MY_SUFFIX")'