修改数组中的一个值

时间:2018-09-17 16:44:19

标签: arrays json edit jq

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

我觉得我太近了,但是我可以弄清楚:(

2 个答案:

答案 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")'