Json jq忽略else条款

Json jq忽略else条款,json,if-statement,select,jq,Json,If Statement,Select,Jq,我希望使用jq搜索和替换基于json行的数据中的特定值,如果匹配为false,则保持对象不变 考虑以下input.json: {“foo”:{“bar”:“one”} {“foo”:{“bar”:“two”} 我尝试了以下语句,但else子句被忽略,因此不匹配的行将丢失: jq-c'如果(选择(.foo.bar==“一”)),则.foo.bar |==“确定”其他。end'input.json 生成结果: {“foo”:{“bar”:“ok”} 以下命令生成正确的输出: jq-c'(.|

我希望使用jq搜索和替换基于json行的数据中的特定值,如果匹配为false,则保持对象不变

考虑以下
input.json

{“foo”:{“bar”:“one”}
{“foo”:{“bar”:“two”}
我尝试了以下语句,但else子句被忽略,因此不匹配的行将丢失:

jq-c'如果(选择(.foo.bar==“一”)),则.foo.bar |==“确定”其他。end'input.json
生成结果:

{“foo”:{“bar”:“ok”}
以下命令生成正确的输出:

jq-c'(.| select(.foo.bar==“one”).foo.bar=“ok”input.json
期望输出:

{“foo”:{“bar”:“ok”}
{“foo”:{“bar”:“two”}

为什么第一个命令无法输出else子句中的对象

. | if .foo.bar == "one" then .foo.bar |= "ok" else . end

select
对于筛选很有用,但是如果没有可选择的内容,它不会返回假值,也不会返回任何内容。

这是否回答了您的问题?不,这个答案是使用select,实际上我们只需要使用一个if语句,正如接受的答案所示。谢谢换句话说,
如果为空,则1 else 2 end
产生空流。