修改数组中的一个值

问题描述 投票:0回答:2

这非常类似于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"'

我觉得我很接近,但我可以搞清楚:(

arrays json edit jq
2个回答
2
投票

确实很接近。你可以简单地用.Value + "-MY_SUFFIX"代替

. + "-MY_SUFFIX"

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

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

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

(实际上,所述要求与使用后缀"-MY-SUFFIX"更好:-)


1
投票

经过多次愚弄,我想我明白了:

cat tags.json | jq '(.[] | select(.Key == "role") | .Value) |= (. + "- MY_SUFFIX")'
© www.soinside.com 2019 - 2024. All rights reserved.