【发布时间】:2021-07-03 14:53:31
【问题描述】:
我想使用 jq 搜索和替换基于行的 json 数据中的特定值,如果匹配为 false,则保持对象不变。
考虑以下input.json:
{"foo":{"bar":"one"}}
{"foo":{"bar":"two"}}
我尝试了以下语句,但是 else 子句被忽略了,因此不匹配的行会丢失:
jq -c '. | if (select(.foo.bar == "one")) then .foo.bar |= "ok" else . end' input.json
产生结果:
{"foo":{"bar":"ok"}}
以下命令产生正确的输出:
jq -c '(. | select(.foo.bar == "one")).foo.bar = "ok"' input.json
想要的输出:
{"foo":{"bar":"ok"}}
{"foo":{"bar":"two"}}
为什么第一条命令在else子句中输出对象.失败?
【问题讨论】:
-
不,这个答案使用的是 select,实际上我们必须使用一个 if 语句,如接受的答案所示。谢谢!
标签: json if-statement select jq