这就是我尝试使用jq
输出数组元素消息的方式
echo '{ errors: [{ "code": "INVALID", "message": "message" }] }' | jq -r '.errors[0].message'
但是errors
是一个可选值。如果没有错误,则该字段丢失。如何在 jq
中正确处理可选值?
因此,在示例中,结果是 message
,如果没有错误,结果为空。
最佳答案
您可以使用 if … then … else … end
表达式(请参阅 manual )使用 has
检查字段是否存在(请参阅 manual ):
… | jq -r 'if has("errors") then .errors[0].message else "no errors" end'
或者,使用在 null
或 false
上触发的替代运算符 //
(请参阅 manual ):
… | jq -r '.errors[0].message // "no errors"'
如果您的代码遇到异常,您还可以为测试配备错误抑制运算符 ?
(请参阅 manual ),这对于示例代码来说不是必需的,因为它会评估如果缺少 .errors
字段,则返回 null
而不会出现错误(请参阅 manual :“它会在键处生成值,或者 null
如果没有的话。"):
… | jq -r '(.errors[0].message)? // "no errors"'
正如 @SUTerliakov 指出的那样,如果您根本不希望任何结果,则可以在这些示例中的任何位置使用 empty
而不是(虚拟字符串)“no error”
成功。
关于json - 如何选择一个值,这是可选的 - 使用 jq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75620085/