![jq를 사용하여 필드와 중첩 필드를 동시에 가져오기](https://linux55.com/image/180943/jq%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%84%EB%93%9C%EC%99%80%20%EC%A4%91%EC%B2%A9%20%ED%95%84%EB%93%9C%EB%A5%BC%20%EB%8F%99%EC%8B%9C%EC%97%90%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0.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"
이 예에 표시된 것보다 더 많은 문제가 있을 수 있으므로 문제[]를 반복해야 합니다.
답변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
존재하지 않는 명령을 추출하려고 시도합니다.