![使用jq同时获取字段和嵌套字段](https://linux22.com/image/180943/%E4%BD%BF%E7%94%A8jq%E5%90%8C%E6%97%B6%E8%8E%B7%E5%8F%96%E5%AD%97%E6%AE%B5%E5%92%8C%E5%B5%8C%E5%A5%97%E5%AD%97%E6%AE%B5.png)
我正在尝试从 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
不存在的 。