jq 更新子串匹配对象
jq update substring matched object
Json 文件:
{
"A": "jack",
"B": [
{
"name": "jack/jil",
"version": "0.1"
},
{
"name": "went/well",
"version": "1.2"
}
]
}
现在我需要更新每个对象版本:“$version-dev”,其中名称从 jack
开始,同时保持 json 的其余部分完好无损。
我能得到的最接近的。
jq '.B[] | select(.name|test("jack.")) | .version += "-dev"' old.json > new.json
在上面的命令中,我只得到 new.json 中具有更新值的特定对象,但我也需要整个 json。
任何建议
您需要用括号括起要更新的整个选择:(… | .version) += …
jq '(.B[] | select(.name|test("jack.")) | .version) += "-dev"' old.json > new.json
{
"A": "jack",
"B": [
{
"name": "jack/jil",
"version": "0.1-dev"
},
{
"name": "went/well",
"version": "1.2"
}
]
}
Json 文件:
{
"A": "jack",
"B": [
{
"name": "jack/jil",
"version": "0.1"
},
{
"name": "went/well",
"version": "1.2"
}
]
}
现在我需要更新每个对象版本:“$version-dev”,其中名称从 jack
开始,同时保持 json 的其余部分完好无损。
我能得到的最接近的。
jq '.B[] | select(.name|test("jack.")) | .version += "-dev"' old.json > new.json
在上面的命令中,我只得到 new.json 中具有更新值的特定对象,但我也需要整个 json。 任何建议
您需要用括号括起要更新的整个选择:(… | .version) += …
jq '(.B[] | select(.name|test("jack.")) | .version) += "-dev"' old.json > new.json
{
"A": "jack",
"B": [
{
"name": "jack/jil",
"version": "0.1-dev"
},
{
"name": "went/well",
"version": "1.2"
}
]
}