这非常类似于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"'
我觉得我很接近,但我可以搞清楚:(
确实很接近。你可以简单地用.Value + "-MY_SUFFIX"
代替
. + "-MY_SUFFIX"
或者更好的是,使用+=
,如:... += "-MY_SUFFIX"
就个人而言,我会使用过滤器:
map(if .Key == "role" then .Value += "-MY_SUFFIX" else . end)
(实际上,所述要求与使用后缀"-MY-SUFFIX"
更好:-)
经过多次愚弄,我想我明白了:
cat tags.json | jq '(.[] | select(.Key == "role") | .Value) |= (. + "- MY_SUFFIX")'