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

标签 json jq

这就是我尝试使用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"'

如果您的代码遇到异常,您还可以为测试配备错误抑制运算符 ? (请参阅 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/

相关文章:

json - 如何用 JQ 填充数字?

json - 解析 terraform plan 输出以检查模块与资源 block 的使用情况

json - 将 jq 查询字符串分成几行

json - 使用 args 在 jq 中查询

linux - Sed 用正则表达式替换 json 文件内的内容

javascript - 如何从运行 PHP 和 MySQL 的 Web 服务器读取 JSON 数据?

java - Json 解析问题(值自动更改为 float )

来自 WEBVTT 的 RDF/JSON 的 Javascript 解析器

json - Symfony json_login 不工作

java - 需要 GSON 返回一个 Java JSONArray