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
存在しないコマンドを抽出しようとします。