这就是我try 使用jq
输出数组元素的消息的方法
echo '{ errors: [{ "code": "INVALID", "message": "message" }] }' | jq -r '.errors[0].message'
但errors
是一个可选值.如果没有错误,则该字段缺失.我必须如何正确地处理jq
中的可选值?
因此,在本例中,结果为message
,如果没有错误,则结果为空.
这就是我try 使用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"'
如果您的代码遇到异常,您还可以为测试配备错误 suppress 运算符?
(请参见manual),这对于您的样例代码来说并不是必需的,因为如果.errors
字段缺失,则它的计算结果为null
而没有错误(请参见manual:"它在关键字处生成值,如果没有值,则为null
."):
… | jq -r '(.errors[0].message)? // "no errors"'
正如@SUTerliakov指出的那样,如果您希望在成功时没有任何结果,则可以在这些示例中的任何位置使用empty
而不是(伪字符串)"no errors"
.