在这种情况下,我有一个原始的JSON,如下所示:
{
"taskDefinition": {
"containerDefinitions": [
{
"name": "web",
"image": "my-image",
"environment": [
{
"name": "DB_HOST",
"value": "localhost"
},
{
"name": "DB_USERNAME",
"value": "user"
}
]
}
]
}
}
我想就地修改匹配键的值,如下所示:
jq '.taskDefinition.containerDefinitions[0].environment[] | select(.name=="DB_USERNAME") | .value="new"' json
我得到了输出
{
"name": "DB_USERNAME",
"value": "new"
}
但是我想要更像是就地修改,或者是修改原始值的整个JSON,比如:
{
"taskDefinition": {
"containerDefinitions": [
{
"name": "web",
"image": "my-image",
"environment": [
{
"name": "DB_HOST",
"value": "localhost"
},
{
"name": "DB_USERNAME",
"value": "new"
}
]
}
]
}
}
有可能吗
jq
或者任何已知的解决方法?
谢谢您。
更新的
对于任何想要编辑多值的人,
这是我使用的方法
JQ=""
for e in DB_HOST=rds DB_USERNAME=xxx; do
k=${e%=*}
v=${e##*=}
JQ+="(.taskDefinition.containerDefinitions[0].environment[] | select(.name==\"$k\") | .value) |= \"$v\" | "
done
jq '${JQ%??}' json
我认为应该有更简洁的方法,但这似乎很管用。