首页 > 解决方案 > 修改数组中的一个值

问题描述

这与使用 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"'

我觉得我很接近,但我能弄清楚:(

标签: arraysjsoneditjq

解决方案


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

. + "-MY_SUFFIX"

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

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

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

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


推荐阅读