我试图从 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)
我需要迭代问题[],因为可能比这个例子中显示的更多。
作为制表符分隔值的列表:为每个值创建一个包含所需值的数组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
不存在的 。