DEV Community

Fevzi Ömür Tekin
Fevzi Ömür Tekin

Posted on

CSV to JSON Converter with Go

Files with a CSV extension are files that are written and saved in a specific order by separating the data with commas for database users. This type of file is needed when you want to transfer data in Excel. I will develop a program with the Go programming language, which can be converted and saved to.

Used CSV Files

## Used CSV Files
plaka,bolge,il,ilce
1,AKDENİZ,ADANA,ALADAĞ
1,AKDENİZ,ADANA,CEYHAN
1,AKDENİZ,ADANA,ÇUKUROVA
1,AKDENİZ,ADANA,FEKE
1,AKDENİZ,ADANA,İMAMOĞLU
......
......
......
3,EGE,AFYONKARAHİSAR,BAŞMAKÇI
3,EGE,AFYONKARAHİSAR,BAYAT
3,EGE,AFYONKARAHİSAR,BOLVADİN
3,EGE,AFYONKARAHİSAR,ÇAY
3,EGE,AFYONKARAHİSAR,ÇOBANLAR
3,EGE,AFYONKARAHİSAR,DAZKIRI
3,EGE,AFYONKARAHİSAR,DİNAR
3,EGE,AFYONKARAHİSAR,EMİRDAĞ
3,EGE,AFYONKARAHİSAR,EVCİLER
3,EGE,AFYONKARAHİSAR,HOCALAR
3,EGE,AFYONKARAHİSAR,İHSANİYE
3,EGE,AFYONKARAHİSAR,İSCEHİSAR
.....
.....
.....
.....
14,KARADENİZ,BOLU,DÖRTDİVAN
14,KARADENİZ,BOLU,GEREDE
14,KARADENİZ,BOLU,GÖYNÜK
14,KARADENİZ,BOLU,KIBRISCIK
14,KARADENİZ,BOLU,MENGEN
14,KARADENİZ,BOLU,MUDURNU
.....
.....
.....
.....
16,MARMARA,BURSA,GÜRSU
16,MARMARA,BURSA,HARMANCIK
16,MARMARA,BURSA,İNEGÖL
16,MARMARA,BURSA,İZNİK
16,MARMARA,BURSA,KARACABEY
16,MARMARA,BURSA,KELES
....
....
....
....
31,AKDENİZ,HATAY,DEFNE
31,AKDENİZ,HATAY,ARSUZ
31,AKDENİZ,HATAY,PAYAS
45,EGE,MANİSA,ŞEHZADELER
45,EGE,MANİSA,YUNUSEMRE
46,AKDENİZ,KAHRAMANMARAŞ,DULKADİROĞLU
46,AKDENİZ,KAHRAMANMARAŞ,ONİKİŞUBAT
47,GÜNEYDOĞU ANADOLU,MARDİN,ARTUKLU
.....
.....
.....
.....
63,GÜNEYDOĞU ANADOLU,ŞANLURFA,HALİLİYE
63,GÜNEYDOĞU ANADOLU,ŞANLIURFA,KARAKÖPRÜ
65,DOĞU ANADOLU,VAN,TUŞBA
65,DOĞU ANADOLU,VAN,İPEKYOLU
67,KARADENİZ,ZONGULDAK,KİLİMLİ
Enter fullscreen mode Exit fullscreen mode

Used Libraries

import (
  "encoding/csv"
  "encoding/json"
  "os"
  "strconv"
)

Enter fullscreen mode Exit fullscreen mode


Note: encoding/csv and encoding/json, csv to json converting Libraries.

Steps to Program

  • We are opening our .csv file first.

    src, err := os.Open("illerilceler.csv")
    if err != nil {
    panic(err)
    }
    defer src.Close()
    
  • The .json file was created.

dst, err := os.Create("il-ilce.json")
if err != nil {
  panic(err)
}
defer dst.Close()
Enter fullscreen mode Exit fullscreen mode
  • Then, we open the .csv file that we opened, and we save it to the .json file that we created
records := make([]Record, 0, len(rows)) // We are opening up a number of rows.
  for _, row := range rows {
    plaka, _ := strconv.ParseInt(row[0], 0, 64) // parsing.
    bolge := row[1]
    il := row[2]
    ilce := row[3]
    /*read the data in the first row and add it to the records recorder.*/
    records = append(records, Record{
      Plaka: plaka,
      Bolge: bolge,
      Il:    il,
      Ilce:  ilce,
    })
  }
  /*We're moving the recorder to json.*/
  err = json.NewEncoder(dst).Encode(records)
  if err != nil {
    panic(err)
  }
Enter fullscreen mode Exit fullscreen mode

All Codes

package main
import (
  "encoding/csv"
  "encoding/json"
  "os"
  "strconv"
)
type Record struct {
  Plaka int64
  Bolge string
  Il    string
  Ilce  string
  // High, Low, Close
}
func main() {
  src, err := os.Open("illerilceler.csv")
  if err != nil {
    panic(err)
  }
  defer src.Close()
  dst, err := os.Create("il-ilce.json")
  if err != nil {
    panic(err)
  }
  defer dst.Close()
  rows, err := csv.NewReader(src).ReadAll()
  if err != nil {
    panic(err)
  }
  records := make([]Record, 0, len(rows)) 
  for _, row := range rows {
    plaka, _ := strconv.ParseInt(row[0], 0, 64) // parseliyoruz.
    bolge := row[1]
    il := row[2]
    ilce := row[3]

    records = append(records, Record{
      Plaka: plaka,
      Bolge: bolge,
      Il:    il,
      Ilce:  ilce,
    })
  }

  err = json.NewEncoder(dst).Encode(records)
  if err != nil {
    panic(err)
  }
}
Enter fullscreen mode Exit fullscreen mode

Note : The codes of the project can be found at this address.

Top comments (0)