Json

使用jq同時獲取欄位和嵌套欄位

  • March 1, 2021

我試圖從 JIRA API 中獲取我需要的兩個屬性。給定以下對 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"

我需要迭代問題

$$ $$因為可能不止此範例中顯示的一個。

作為製表符分隔值的列表:為每個值創建一個所需值的數組issue[]並將其傳遞給@tsv.

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

作為具有由空格分隔的兩個值的字元串:為每個值創建一個雙引號字元串,issue[]並用於\(...)插入字元串中的值。

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

最後兩個命令的問題是第一個命令先獲取.key,然後.fields.summary. 這兩條數據將在不同的行上輸出。

最後一個命令嘗試提取.key.fields.summary不存在的 。

引用自:https://unix.stackexchange.com/questions/612143