본문 바로가기
Golang

Golang JSON을 CSV로 변환

by 시바도지 2023. 3. 15.
반응형

Go에서 Json을 CSV로 변경하기 위해서는 encoding/csvencodeing/json 패캐지를 사용한다.

 

package main

import (
	"encoding/csv"
	"encoding/json"
	"fmt"
	"log"
	"os"
)

func main() {
	// 예제 데이터
	jsonData := `[{"name":"Uhm", "age":19, "city":"Soeul"},
                  {"name":"Jun", "age":23, "city":"Tokyo"},
                  {"name":"Sik", "age":27, "city":"Los Angeles"}]`

    // json 데이터를 슬라이스 형태의 맵으로 변환.
	var data []map[string]interface{}
	err := json.Unmarshal([]byte(jsonData), &data)
	if err != nil {
		log.Fatal(err)
	}

    // csv 파일 생성
	file, err := os.Create("data.csv")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

    // csv writer 생성
	writer := csv.NewWriter(file)
	defer writer.Flush()

    // 파일 헤더 레코드 작성
	header := []string{"name", "age", "city"}
	err = writer.Write(header)
	if err != nil {
		log.Fatal(err)
	}

    // data 행 작성
    // data 행은 for 루프를 사용하여 맵 형태로 변환한 데이터 슬라이스에서 추출
	for _, row := range data {
		name := row["name"].(string)
		age := fmt.Sprintf("%v", row["age"])
		city := row["city"].(string)

		err := writer.Write([]string{name, age, city})
		if err != nil {
			log.Fatal(err)
		}
	}
}

 

반응형

'Golang' 카테고리의 다른 글

Golang 임시 파일 생성(os.CreateTemp)  (0) 2023.03.27
Golang CSV를 JSON 변환  (0) 2023.03.15
Golang 디렉토리 생성(os.Mkdir, os.MkdirAll)  (0) 2023.03.15
Golang sync.WaitGroup  (0) 2023.03.06
omitempty  (0) 2023.01.10

댓글