gpt4 book ai didi

json - 修改JSON jq中的键值数组

转载 作者:行者123 更新时间:2023-12-03 05:16:35 25 4
gpt4 key购买 nike

以防万一,我的原始 json 如下所示:

{
"taskDefinition": {
"containerDefinitions": [
{
"name": "web",
"image": "my-image",
"environment": [
{
"name": "DB_HOST",
"value": "localhost"
},
{
"name": "DB_USERNAME",
"value": "user"
}
]
}
]
}
}

我想就地修改匹配键的值,如下所示:

jq '.taskDefinition.containerDefinitions[0].environment[] |选择(.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

我认为应该有更简洁的方法,但这似乎工作正常。

最佳答案

如果您使用|=,则分配给路径就足够了,例如

jq '
(.taskDefinition.containerDefinitions[0].environment[] |
select(.name=="DB_USERNAME") | .value) |= "new"
' infile.json

输出:

{
"taskDefinition": {
"containerDefinitions": [
{
"name": "web",
"image": "my-image",
"environment": [
{
"name": "DB_HOST",
"value": "localhost"
},
{
"name": "DB_USERNAME",
"value": "new"
}
]
}
]
}
}

关于json - 修改JSON jq中的键值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54039268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com