다음 JSON 형식이 있습니다.
{
"page":1,
"total_results":1,
"total_pages":1,
"results":[
{
"id":6037,
"genre_ids":[35,80,9648,53],
"popularity":11.379
}
]
}
Genre_ids 배열이 쉼표로 구분되고 가로 간격에 탭을 추가하지 않는 이 형식을 생성해야 합니다.
6037 35,80,9648,53 11.379
다음을 사용하여 결과 배열을 평면화할 수 있었습니다.
jq -r '.results[0] | [.id,.popularity] | @tsv'
결과 :
6037 11.379
하지만 Genre_ids를 추가하면:
jq -r '.results[0] | [.id,.genre_ids[],.popularity] | @tsv'
나는 얻다:
308531 28 12 35 878 10751 32.497
genre_ids
탭으로 구분된 상위 요소 내에서 배열을 쉼표로 구분된 목록으로 병합하는 방법은 무엇입니까 ?
답변1
당신은 할 수join
배열을 문자열로 변환:
$ jq -r '.results[0] | [.id,(.genre_ids | join(",")),.popularity] | @tsv' < foo.json
6037 35,80,9648,53 11.379
답변2
jq -r '.results[] | [ .id, (.genre_ids|@csv), .popularity ] | @tsv' file
그러면 genre_ids
배열이 탭으로 구분된 출력의 일부가 되기 전에 CSV 형식의 레코드로 다시 포맷됩니다.
질문의 데이터를 고려하면 출력은 다음과 같습니다.
6037 35,80,9648,53 11.379
results
배열에 여러 요소가 포함된 경우 각 요소는 자체 출력 라인에서 형식이 지정됩니다.
배열에 더 많은 요소를 제공하는 출력 예 results
:
$ cat file
{
"page": 1,
"results": [
{
"genre_ids": [ 3, 8, 964, 5 ],
"id": 6000,
"popularity": 12
},
{
"genre_ids": [ 35, 80, 9648, 53 ],
"id": 6037,
"popularity": 11.379
}
],
"total_pages": 1,
"total_results": 2
}
$ jq -r '.results[] | [ .id, (.genre_ids|@csv), .popularity ] | @tsv' file
6000 3,8,964,5 12
6037 35,80,9648,53 11.379