add csv2json.go to converta csv with headers to jsonlines
This commit is contained in:
56
tools/go/csv2json/csv2json.go
Normal file
56
tools/go/csv2json/csv2json.go
Normal file
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user