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"
이 예에 표시된 것보다 더 많은 문제가 있을 수 있으므로 문제[]를 반복해야 합니다.
답변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
마지막 두 명령의 문제점은 첫 번째 명령이 먼저 나온 .key
다음 .fields.summary
. 이 두 데이터 조각은 별도의 라인에 출력됩니다.
마지막 명령은 .key.fields.summary
존재하지 않는 명령을 추출하려고 시도합니다.