为什么 if 语句的两个分支都没有到达?

问题描述 投票:0回答:1

由于

.value
true
,它没有字段
message
,我认为
.message?
应该被评估为
false
。然后应该打印“Y”。你能帮我理解为什么“X”和“Y”都没有打印吗?

$ jq '.value|if .message? then "X" else "Y" end' <<< '{"value":true}'

如何修改代码,使得如果“message”是

.value
的值的字段,则打印“X”,否则打印“Y”?

jq
1个回答
0
投票

true
不能有键
message
,因此
.message?
不返回任何内容,并且两个分支都不会被执行。例如,请参阅 为什么 jq modify 和 if-then-else 不起作用

相反,您可以检查以确保

.
object
,并使用
if (. | type) == "object" and .message?
检查密钥是否存在。如下所示,仅当
message
键存在时才返回“X”,如果不存在
message
键或者值不是对象,则返回“y”。


$ jq '.value|if (. | type) == "object" and .message? then "X" else "Y" end' <<< '{"value":true}'
"Y"
$ jq '.value|if (. | type) == "object" and .message? then "X" else "Y" end' <<< '{"value":{"message": true}}'
"X"
$ jq '.value|if (. | type) == "object" and .message? then "X" else "Y" end' <<< '{"value":{"notmessage": true}}'
"Y"
© www.soinside.com 2019 - 2024. All rights reserved.