我有一个实用程序,可以为我提供具有不同结构的 JSON 数据。有时数组会丢失,有时则不会丢失。
例如,这是缺少数组的情况:
{
"returned": 0,
"total": 0
}
...这是包含数组的情况:
{
"statuses": [
{
"Ident": "server:11ylb",
"Ident2": "server:",
"desc": "HOSE",
"node": "servA"
},
{
"Ident": "server:11yla",
"Ident2": "server:",
"numberOfRuns": 1,
"desc": "CAR",
"node": "servA"
}
],
"returned": 2,
"total": 2
}
问题是,如果我尝试在 为 0 时迭代数组的元素 statutes
,total
则会收到错误:
$ utility | jq '.statuses.[]'
jq: error (at <stdin>:4): Cannot iterate over null (null)
当输入中缺少数组时,如何避免此错误?
答案1
要迭代statuses
数组,.statuses[]?
如果您认为它有时可能不存在,请使用。该表达式.statuses[]?
相当于.statuses | .[]?
,即,它提取statuses
值,如果它是有效数组,则继续从中生成一组数组元素。
例如,以下表达式将为您提供一个包含数组中所有值jq
的 JSON 数组,如果该数组不存在,则为您提供一个空数组:desc
statuses
statuses
[.statuses[]?.desc]
也可以看看 ”.[]?“ 和 ”可选对象标识符索引:.foo?“在jq
手册中。