Golang : Convert CSV data to JSON format and save to file
Need to load a CSV data file and save it to JSON encoded file or stream it out ... like to a http service ? This tutorial will cover just that :
The Golang code below will first read this data.csv data file :
Adam,36,CEO
Eve,34,CFO
Mike,38,COO
and output to data.json file
[
{"Name":"Adam","Age":36,"Job":"CEO"},
{"Name":"Eve","Age":34,"Job":"CFO"},
{"Name":"Mike","Age":38,"Job":"COO"}
]
csv2json.go
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"os"
"strconv"
)
type Employee struct {
Name string
Age int
Job string
}
func main() {
// read data from CSV file
csvFile, err := os.Open("./data.csv")
if err != nil {
fmt.Println(err)
}
defer csvFile.Close()
reader := csv.NewReader(csvFile)
reader.FieldsPerRecord = -1
csvData, err := reader.ReadAll()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
var oneRecord Employee
var allRecords []Employee
for _, each := range csvData {
oneRecord.Name = each[0]
oneRecord.Age, _ = strconv.Atoi(each[1]) // need to cast integer to string
oneRecord.Job = each[2]
allRecords = append(allRecords, oneRecord)
}
jsondata, err := json.Marshal(allRecords) // convert to JSON
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// sanity check
// NOTE : You can stream the JSON data to http service as well instead of saving to file
fmt.Println(string(jsondata))
// now write to JSON file
jsonFile, err := os.Create("./data.json")
if err != nil {
fmt.Println(err)
}
defer jsonFile.Close()
jsonFile.Write(jsondata)
jsonFile.Close()
}
Output :
[{"Name":"Adam","Age":36,"Job":"CEO"},{"Name":"Eve","Age":34,"Job":"CFO"},{"Name":"Mike","Age":38,"Job":"COO"}]
References :
https://www.socketloop.com/references/golang-encoding-json-marshal-function-example
See also : Convert JSON to CSV in Golang
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+6k Golang : Fix opencv.LoadHaarClassifierCascade The node does not represent a user object error
+6.8k Golang : Output or print out JSON stream/encoded data
+5.4k Swift : Convert string array to array example
+18.9k Golang : Delete duplicate items from a slice/array
+11.6k Golang : Format numbers to nearest thousands such as kilos millions billions and trillions
+8.4k Useful methods to access blocked websites
+5.4k Golang : How to deal with configuration data?
+15.2k Golang : package is not in GOROOT during compilation
+16.1k Golang : Read large file with bufio.Scanner cause token too long error
+12.5k Golang : Flush and close file created by os.Create and bufio.NewWriter example
+16.8k Golang : Generate QR codes for Google Authenticator App and fix "Cannot interpret QR code" error
+5.5k Gogland : Datasource explorer