예제를 사용하여 Golang에서 JSON을 CSV로 변환

블로그

예제를 사용하여 Golang에서 JSON을 CSV로 변환

Golang csv.NewWriter() 데이터 구조를 다음으로 변환하는 내장 함수입니다. CSV 체재. CSV(쉼표로 구분된 값)는 Excel 및 스프레드시트에서 일반적으로 사용되는 널리 수용되는 데이터 언어이므로 스크립트에서 데이터를 생성하고 표준 형식으로 원하는 경우 매우 유용합니다.

CSV 패키지에는 새 작가() CSV 데이터를 쓰는 데 사용되는 Writer 개체를 반환하는 함수입니다. csv.Writer()는 개행 문자로 끝나는 csv 레코드를 작성하고 쉼표를 필드 구분 기호로 사용합니다.

다음 코드 조각을 하나씩 참조하십시오.

json 파일을 만들어 봅시다. 우리는 이름을 지정할 것입니다 회사.json.

[ { 'App': 'Instagram', 'Company': 'Facebook', 'Category': 'Social Media' }, { 'App': 'WeChat', 'Company': 'Tencent', 'Category': 'Social Media' }, { 'App': 'Hotstar', 'Company': 'Disney', 'Category': 'Entertainment' }, { 'App': 'CNBC', 'Company': 'Comcast', 'Category': 'News' }, { 'App': 'SnapChat', 'Company': 'Snap', 'Category': 'Social Media' } ]

따라서 JSON 객체에는 세 가지 속성이 있습니다.

  1. 회사
  2. 범주

이제 **hello.go **파일을 작성해 보겠습니다.

스파크 SQL 치트 시트

먼저 다음 go 패키지를 가져와야 합니다.

package main import ( 'encoding/csv' 'encoding/json' 'fmt' 'io/ioutil' 'os' )

패키지 CSV 쉼표로 구분된 값(CSV) 파일을 읽고 씁니다.

CSV 파일에는 여러 종류가 있으며 이 패키지는 RFC 4180에 설명된 형식을 지원합니다.

패키지 json RFC 7159에 정의된 대로 JSON의 인코딩 및 디코딩을 구현합니다. JSON Go 값은 Marshal 및 Unmarshal 기능에 대한 문서에 설명되어 있습니다.

패키지 fmt 도구 포맷된 I/O C의 printf 및 scanf와 유사한 기능을 사용합니다. 형식 ' 동사 '는 C에서 파생되었지만 더 간단합니다.

패키지 io / ioutil 일부 I/O 유틸리티 기능을 구현합니다.

패키지 운영 체제 기능에 플랫폼 독립적인 인터페이스를 제공합니다. 디자인은 Unix와 비슷하지만 오류 처리는 Go와 비슷합니다. 실패한 호출은 오류 번호가 아닌 오류 유형의 값을 반환합니다.

구매처

이제 다음 단계는 구조체 .

// Application struct type Application struct { App string Company string Category string }

Golang Structs는 명명된 필드/속성 컬렉션을 포함하는 사용자 정의 유형입니다. 관련 데이터를 그룹화하여 단일 단위를 형성하는 데 사용됩니다.

이제 정의 주요 기능.

첫 번째 단계는 파일 읽기 **ioutil.ReadFile() **함수를 사용합니다.

jsonDataFromFile, err := ioutil.ReadFile('./company.json') if err != nil { fmt.Println(err) }

우리는 이미 **json **파일을 정의했습니다. ioutil.ReadFile() 함수는 filename으로 명명된 파일을 읽고 내용을 반환합니다.

이제 json 파일의 내용을 Unmarshal합니다.

비주얼 스튜디오 코드 멀티 셀렉트
var jsonData []Application err = json.Unmarshal([]byte(jsonDataFromFile), &jsonData) if err != nil { fmt.Println(err) }

이제 **를 사용하여 Golang에서 csv 파일을 만듭니다. os.Create() **기능.

csvFile, err := os.Create('./data.csv') if err != nil { fmt.Println(err) } defer csvFile.Close()

이제 다음 코드를 참조하십시오.

writer := csv.NewWriter(csvFile) for _, usance := range jsonData { var row []string row = append(row, usance.App) row = append(row, usance.Company) row = append(row, usance.Category) writer.Write(row) } // remember to flush! writer.Flush()

위의 코드 스니펫에서는 라이터 객체를 생성한 다음 json 콘텐츠를 해당 csv 파일에 하나씩 추가합니다. 따라서 해당 json 콘텐츠는 csv 파일로 변환됩니다.

2차원 슬라이스 행에는 샘플 csv 레코드가 포함됩니다. Go os.Create() 함수는 csv 파일 data.csv를 생성합니다. 이미 존재하는 경우 모든 레코드를 자르고 의 인스턴스를 반환합니다. os.파일() 물체.

NS csvwriter.Write(행) 함수는 문자열의 각 조각을 다음과 같이 파일에 쓰기 위해 호출됩니다. CSV 기록.

전체 최종 코드는 다음과 같습니다.

// hello.go package main import ( 'encoding/csv' 'encoding/json' 'fmt' 'io/ioutil' 'os' ) // Application struct type Application struct { App string Company string Category string } func main() { // read data from file jsonDataFromFile, err := ioutil.ReadFile('./company.json') if err != nil { fmt.Println(err) } // Unmarshal JSON data var jsonData []Application err = json.Unmarshal([]byte(jsonDataFromFile), &jsonData) if err != nil { fmt.Println(err) } csvFile, err := os.Create('./data.csv') if err != nil { fmt.Println(err) } defer csvFile.Close() writer := csv.NewWriter(csvFile) for _, usance := range jsonData { var row []string row = append(row, usance.App) row = append(row, usance.Company) row = append(row, usance.Category) writer.Write(row) } // remember to flush! writer.Flush() }

산출

Instagram,Facebook,Social Media WeChat,Tencent,Social Media Hotstar,Disney,Entertainment CNBC,Comcast,News SnapChat,Snap,Social Media

마지막으로 Golang: JSON을 CSV 파일로 변환 예제가 끝났습니다.

#json #go #golang