업데이트:

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"

댓글남기기