使用jq同时获取字段和嵌套字段

Spo*_*ins 4 json jq

我试图从 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"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想得到以下输出:

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
Run Code Online (Sandbox Code Playgroud)

我可以用新行将它们分开:

> cat rm111.json | jq -r '.issues[] | .key,.fields.summary'
RM-111
6.6.0
Run Code Online (Sandbox Code Playgroud)

但是以下(应该给出我实际需要的格式)不起作用,我不知道为什么:

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

我需要迭代问题[],因为可能比这个例子中显示的更多。

Kus*_*nda 7

作为制表符分隔值的列表:为每个值创建一个包含所需值的数组issue[]并将其传递给@tsv.

$ jq -r '.issues[] | [ .key, .fields.summary ] | @tsv' file.json
RM-111  6.6.0
Run Code Online (Sandbox Code Playgroud)

作为两个值用空格分隔的字符串:为每个值创建一个双引号字符串,issue[]并用于\(...)插入字符串中的值。

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

最后两个命令的问题是它们中的第一个首先得到.key,然后.fields.summary. 这两条数据将在不同的行上输出。

最后一个命令尝试提取.key.fields.summary不存在的 。