jqを使用してフィールドとネストしたフィールドを同時にインポートする

jqを使用してフィールドとネストしたフィールドを同時にインポートする

JIRA APIで必要な2つの属性を取得しようとしています。 JQに次の入力が与えられました。

{
  "expand": "names,schema",
  "startAt": 0,
  "maxResults": 50,
  "total": 1,
  "issues": [
    {
      "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
      "id": "73270",
      "key": "RM-111",
      "fields": {
        "statuscategorychangedate": "2020-09-29T15:12:18.837+0100",
        "lastViewed": "2020-09-30T09:25:38.846+0100",
        "summary": "6.6.0"
      }
    }
  ]
}

次の出力を取得したい。

RM-111 6.6.0

個別に入手できます。

> cat rm111.json | jq -r '.issues[] | .key'
RM-111

> cat rm111.json | jq -r '.issues[] | .fields.summary'
6.6.0

新しい行で区切ることができます。

> cat rm111.json | jq -r '.issues[] | .key,.fields.summary'
RM-111
6.6.0

ただし、次の(実際に必要な形式を提供する必要があります)は機能せず、その理由を理解できません。

> cat rm111.json | jq -r '.issues[] | .key .fields.summary'
jq: error (at <stdin>:18): Cannot index string with string "fields"

この例に示されているよりも多くの問題がある可能性があるため、問題[]を繰り返す必要があります。

答え1

タブで区切られた値のリスト:各値に必要な値の配列を作成してissue[]に渡します@tsv

$ jq -r '.issues[] | [ .key, .fields.summary ] | @tsv' file.json
RM-111  6.6.0

スペースで区切られた2つの値の文字列:各値に対して二重引用符で囲まれた文字列が生成され、文字列に値を挿入するためにissue[]使用されます。\(...)

$ jq -r '.issues[] | "\(.key) \(.fields.summary)"' file.json
RM-111 6.6.0

最後の2つのコマンドの問題は、最初のコマンドが最初に出てから.keyです.fields.summary。これら2つのデータは別々のラインに出力されます。

最後のコマンドは、.key.fields.summary存在しないコマンドを抽出しようとします。

関連情報