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

使用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"
      }
    }
  ]
}

我想得到以下输出:

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"

我需要迭代 issues[],因为可能不止此示例中显示的问题。

答案1

作为制表符分隔值的列表:为每个值创建一个所需值的数组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

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

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

相关内容