diff --git a/.gitignore b/.gitignore index 2eea525d885d5148108f6f3a9a8613863f783d36..998ebd1d850f07a8afdb550c8c6780a33dab3935 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.env \ No newline at end of file +.env +boiler.csv \ No newline at end of file diff --git a/csv/main.go b/csv/main.go new file mode 100644 index 0000000000000000000000000000000000000000..1ddd8405e141b0f535c60e203fdc586c1b32eb60 --- /dev/null +++ b/csv/main.go @@ -0,0 +1,48 @@ +package csv + +import ( + "encoding/csv" + "encoding/json" + "os" + + "jonasled.dev/jonasled/ems-esp-logger/helper" +) + +func JsonToCsv(jsonData string) { + var data map[string]interface{} + if err := json.Unmarshal([]byte(jsonData), &data); err != nil { + panic(err) + } + + file, err := os.OpenFile(os.Getenv("OUTPUT_FILE_NAME"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + panic(err) + } + defer file.Close() + + writer := csv.NewWriter(file) + defer writer.Flush() + + fileInfo, err := file.Stat() + if err != nil { + panic(err) + } + + if fileInfo.Size() == 0 { + header := make([]string, 0, len(data)) + for key := range data { + header = append(header, key) + } + if err := writer.Write(header); err != nil { + panic(err) + } + } + + row := make([]string, 0, len(data)) + for _, value := range data { + row = append(row, helper.AnyToString(value)) + } + if err := writer.Write(row); err != nil { + panic(err) + } +} diff --git a/helper/anyToString.go b/helper/anyToString.go new file mode 100644 index 0000000000000000000000000000000000000000..7b7e728bbdd9782eabe247e0bb44ac9b9048b42e --- /dev/null +++ b/helper/anyToString.go @@ -0,0 +1,16 @@ +package helper + +import "fmt" + +func AnyToString(value interface{}) string { + switch v := value.(type) { + case string: + return v + case float64: + return fmt.Sprintf("%.2f", v) + case int: + return fmt.Sprintf("%d", v) + default: + return "" + } +}