さまざまな構造の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
}
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
マニュアルです。