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")) }