Jq 활용, Json to CSV 변환
업데이트:
jq 명령어를 통한 Json to CSV 변환
Jq 명령어 활용
- https://stedolan.github.io/jq/
- jq is a lightweight and flexible command-line JSON processor.
- jq를 사용하여 JSON 배열과 NDJSON 형식의 데이터를 CSV 형식으로 변환하는 예제
- JSON 배열은 여러 개의 JSON 객체를 대괄호로 묶은 형식이고, NDJSON은 Newline Delimited JSON의 약자로, 한 줄에 하나의 JSON 객체를 나열한 형식
- NDJSON은 MongoDB나 Elasticsearch 등에서 사용되는 데이터 형식
Json 배열에서 CSV 데이터 변환
[
{
"fs": "/dev/mapper/vgubuntu-root",
"type": "ext4",
"size": "915G",
"used": "135G",
"avail": "734G",
"usedpercentage": "16%",
"mounted": "/"
},
{
"fs": "/dev/nvme0n1p2",
"type": "ext4",
"size": "1.4G",
"used": "378M",
"avail": "939M",
"usedpercentage": "29%",
"mounted": "/boot"
},
{
"fs": "/dev/nvme0n1p1",
"type": "vfat",
"size": "511M",
"used": "30M",
"avail": "482M",
"usedpercentage": "6%",
"mounted": "/boot/efi"
}
]
Header 추출
- CSV 파일의 헤더(keys)를 추출하기 위해 다음과 같은 명령어를 사용
-r
옵션은 raw output을 의미하며, 쌍따옴표를 제거합니다.keys_unsorted
는 객체의 키들을 정렬하지 않고 반환하는 함수이고,@csv
는 배열을 CSV 형식으로 출력하는 필터입니다.
$ cat data.json | jq -r '.[0] | keys_unsorted | @csv'
"fs","type","size","used","avail","usedpercentage","mounted"
Data 추출
- 배열의 각 객체에 대해 모든 값을 배열로 만들고, CSV 형식으로 출력합니다.
.[]
는 배열의 각 요소를 반복하는 반복자이고,[.[]]
는 객체의 모든 값을 배열로 만드는 표현식입니다.
$ cat data.json | jq -r '.[] | [.[]] | @csv'
"/dev/mapper/vgubuntu-root","ext4","915G","135G","734G","16%","/"
"/dev/nvme0n1p2","ext4","1.4G","378M","939M","29%","/boot"
"/dev/nvme0n1p1","vfat","511M","30M","482M","6%","/boot/efi"
NDJson 형식에서 CSV 데이터 변환
{ "fs": "/dev/mapper/vgubuntu-root", "type": "ext4", "size": "915G", "used": "135G", "avail": "734G", "usedpercentage": "16%", "mounted": "/" }
{ "fs": "/dev/nvme0n1p2", "type": "ext4", "size": "1.4G", "used": "378M", "avail": "939M", "usedpercentage": "29%", "mounted": "/boot" }
{ "fs": "/dev/nvme0n1p1", "type": "vfat", "size": "511M", "used": "30M", "avail": "482M", "usedpercentage": "6%", "mounted": "/boot/efi" }
Header 추출
- 첫번째 라인의 json 에서 헤더(keys) 정보만 추출 (csv)
$ cat nd.json | head -n1 | jq -r 'keys_unsorted | @csv'
"fs","type","size","used","avail","usedpercentage","mounted"
Data 추출
$ cat nd.json | jq -r '[.[]] | @csv'
"/dev/mapper/vgubuntu-root","ext4","915G","135G","734G","16%","/"
"/dev/nvme0n1p2","ext4","1.4G","378M","939M","29%","/boot"
"/dev/nvme0n1p1","vfat","511M","30M","482M","6%","/boot/efi"
댓글남기기