这就是我如何尝试使用jq输出数组元素的消息
jq
echo '{ errors: [{ "code": "INVALID", "message": "message" }] }' | jq -r '.errors[0].message'
但是errors是一个可选值,如果没有错误的话,这个字段是缺失的,我必须如何在jq中正确地处理可选值?因此,在示例中,结果为message,如果没有错误,则结果为空。
errors
message
ddrv8njm1#
您可以使用if … then … else … end表达式(参见手册)检查使用has的字段是否存在(参见手册):
if … then … else … end
has
… | jq -r 'if has("errors") then .errors[0].message else "no errors" end'
或者,使用在null或false上触发的替代运算符//(参见手册):
null
false
//
… | jq -r '.errors[0].message // "no errors"'
如果您的代码会遇到异常,您还可以为测试配备错误抑制运算符?(请参阅手册),这对您的示例代码来说是不必要的,因为如果.errors字段丢失,它会计算为null而没有错误(请参阅手册:“它将在键处生成值,如果不存在,则为null。”):
?
.errors
… | jq -r '(.errors[0].message)? // "no errors"'
正如@SUTerliakov所指出的,如果您不希望在成功时得到任何结果,可以在这些示例中的任何地方使用empty,而不是(伪字符串)"no errors"。
empty
"no errors"
1条答案
按热度按时间ddrv8njm1#
您可以使用
if … then … else … end
表达式(参见手册)检查使用has
的字段是否存在(参见手册):或者,使用在
null
或false
上触发的替代运算符//
(参见手册):如果您的代码会遇到异常,您还可以为测试配备错误抑制运算符
?
(请参阅手册),这对您的示例代码来说是不必要的,因为如果.errors
字段丢失,它会计算为null
而没有错误(请参阅手册:“它将在键处生成值,如果不存在,则为null
。”):正如@SUTerliakov所指出的,如果您不希望在成功时得到任何结果,可以在这些示例中的任何地方使用
empty
,而不是(伪字符串)"no errors"
。