diff options
author | nirav <nirav@teisuu.com> | 2023-05-19 16:45:14 +0000 |
---|---|---|
committer | nirav <nirav@teisuu.com> | 2023-05-19 16:45:14 +0000 |
commit | 6e69d8973cf11a00fc31bb01606fe2e38086ab12 (patch) | |
tree | ebec4149fd77123902eebf3871fa23494db8ea9d | |
download | csvtojson-6e69d8973cf11a00fc31bb01606fe2e38086ab12.tar.gz csvtojson-6e69d8973cf11a00fc31bb01606fe2e38086ab12.zip |
-rw-r--r-- | main.go | 57 |
1 files changed, 57 insertions, 0 deletions
@@ -0,0 +1,57 @@ +package main + +import ( + "encoding/csv" + "encoding/json" + "flag" + "fmt" + "io" + "os" +) + +var out = os.Stdout + +func main() { + flag.Parse() + r := csv.NewReader(os.Stdin) + r.TrimLeadingSpace = true + n := -1 + var columns []string + out.Write([]byte("[")) + for { + n++ + d, err := r.Read() + if err != nil { + if err == io.EOF { + break + } + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + if n == 0 { + if len(d) == 0 { + os.Exit(1) + } + columns = d + continue + } else if n > 1 { + out.Write([]byte(",")) + out.Write([]byte("\n")) + } + m := make(map[string]string) + for i, v := range d { + if i > len(columns)-1 { + break + } + m[columns[i]] = v + } + j, err := json.Marshal(m) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + out.Write(j) + } + out.Write([]byte("]")) + out.Write([]byte("\n")) +} |