json 如何选择一个值,这是可选的-使用jq

1mrurvl1  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(107)

这就是我如何尝试使用jq输出数组元素的消息

echo '{ errors: [{ "code": "INVALID", "message": "message" }] }' | jq -r '.errors[0].message'

但是errors是一个可选值,如果没有错误的话,这个字段是缺失的,我必须如何在jq中正确地处理可选值?
因此,在示例中,结果为message,如果没有错误,则结果为空。

ddrv8njm

ddrv8njm1#

您可以使用if … then … else … end表达式(参见手册)检查使用has的字段是否存在(参见手册):

… | jq -r 'if has("errors") then .errors[0].message else "no errors" end'

或者,使用在nullfalse上触发的替代运算符//(参见手册):

… | jq -r '.errors[0].message // "no errors"'

如果您的代码会遇到异常,您还可以为测试配备错误抑制运算符?(请参阅手册),这对您的示例代码来说是不必要的,因为如果.errors字段丢失,它会计算为null而没有错误(请参阅手册:“它将在键处生成值,如果不存在,则为null。”):

… | jq -r '(.errors[0].message)? // "no errors"'

正如@SUTerliakov所指出的,如果您不希望在成功时得到任何结果,可以在这些示例中的任何地方使用empty,而不是(伪字符串)"no errors"

相关问题