配列が存在しない場合は、jqを使用してJSONドキュメントを解析する方法は?

配列が存在しない場合は、jqを使用してJSONドキュメントを解析する方法は?

さまざまな構造の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配列を提供し、配列が存在しない場合は空の配列を提供します。descstatusesstatuses

[.statuses[]?.desc]

皆さんも見てください」.[]?「そして」オプションのオブジェクト識別子インデックス:.foo?jqマニュアルです。

関連情報