From 6430a2a340dd17191b00f2614fd8dacbfa1b4b06 Mon Sep 17 00:00:00 2001 From: Tobias Kessels Date: Thu, 1 Aug 2024 14:23:32 +0200 Subject: [PATCH] add csv2json.go to converta csv with headers to jsonlines --- tools/go/csv2json/csv2json.go | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tools/go/csv2json/csv2json.go diff --git a/tools/go/csv2json/csv2json.go b/tools/go/csv2json/csv2json.go new file mode 100644 index 0000000..627b79d --- /dev/null +++ b/tools/go/csv2json/csv2json.go @@ -0,0 +1,56 @@ +package main + +import ( + "encoding/csv" + "encoding/json" + "flag" + "fmt" + "log" + "os" +) + +func csvToJson(inputSource *os.File) { + csvReader := csv.NewReader(inputSource) + headers, err := csvReader.Read() + if err != nil { + log.Fatal("Failed to read headers: ", err) + } + for { + record, err := csvReader.Read() + if err != nil { + if err.Error() == "EOF" { + break + } + log.Fatal("Failed to read the data: ", err) + } + if len(record) == len(headers) { + jsonData := make(map[string]string) + for i, value := range record { + jsonData[headers[i]] = value + } + jsonOutput, err := json.Marshal(jsonData) + if err != nil { + log.Fatal("Failed to convert to json: ", err) + } + fmt.Println(string(jsonOutput)) + } else { + log.Fatal("The number of columns in the record is not equal to the number of headers") + } + } + +} + +func main() { + inputSource := os.Stdin + flag.Parse() + var err error + if flag.NArg() > 0 { + inputSource, err = os.Open(flag.Args()[0]) + if err != nil { + log.Fatalf("Failed to open file: %v\n", err) + } + defer inputSource.Close() + } + csvToJson(inputSource) + +}