对于此数据 https://jqplay.org/s/onlU9ghjn1
我无法找出执行类似操作的正确语法
.gcp_price_list | ."CP-COMPUTEENGINE-OS" |
(
if ( .[].cores == "shared" ) then
.[].cores = 0.5
end
)
似乎我需要else
部分,但是我不确定该放在哪里。如果我这样做:
.gcp_price_list | ."CP-COMPUTEENGINE-OS" |
(
if ( .[].cores == "shared" ) then
.[].cores = 0.5
else .[].cores = .[].cores end
)
结果中仍然存在“共享”,即
"win": {
"low": 0.02,
"high": 0.04,
"cores": "shared",
"percore": true
}
输入被复制到结果中,这不是我想要的。
相关,但我认为它们没有什么帮助
How do I update a single value in a json document using jq?
我的替代方案是用文本编辑器“全部替换”, 但是如果有一个优雅的解决方案,我将在这里留下这个问题。
答案 0 :(得分:0)
看起来好像您想要的一样:
.gcp_price_list
| ."CP-COMPUTEENGINE-OS"
| map_values(
if .cores == "shared"
then .cores = 0.5
else . end )
无论如何,使用.[].cores
之类的表达式作为if
,then
或else
的参数时要小心,因为它们会产生结果流。
将来,请遵循MCVE准则。
如果要编辑JSON文档,则可以像这样使用|=
:
.gcp_price_list."CP-COMPUTEENGINE-OS" |=
map_values(
if ( .cores == "shared" ) then
.cores = 0.5
else . end
)