summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..0b5df81
--- /dev/null
+++ b/main.go
@@ -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"))
+}