这就是我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'

或者,使用nullfalse上触发的替代操作符//(参见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".

Json相关问答推荐

解析Ansible AWS ec2_security_group中的json以提取安全组ID

使用 jq 从带有转义反斜杠字符的嵌套 JSON 中提取数据

将 json 转换为 jsonb 安全吗?

Python 将 struct 化文本转换和筛选为对象

Shell脚本空格转义

JOLT 在 struct 体中间添加一个 JSON 字段

如何使用 boost::json::value 调用无参数函数

如何限制resolveJsonModule的范围?

当值包含ansible中的字符串时解析json值

使用 boost 属性树读取 int 数组

JSON extract\set 的 SQLite JSON1 示例

Laravel5 Json 获取文件内容

在 Rails 中使用 JSON 创建嵌套对象

Golang struct 的 XML 和 JSON 标签?

有什么方法可以在 elasticsearch 服务器中导入 json 文件(包含 100 个文档).?

如何向从文件中检索的 JSON 数据添加键值?

as_json 没有在关联上调用 as_json

在 HTML 数据属性上添加 JSON 是不是很糟糕?

ASP.NET Web API JSON 输出中没有时间的日期

如何在所有子项中查询具有特定值的属性的firebase