Skip to content
Snippets Groups Projects
main.go 1.12 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jonas Leder's avatar
    Jonas Leder committed
    package csv
    
    import (
    	"encoding/csv"
    	"encoding/json"
    	"os"
    
    Jonas Leder's avatar
    Jonas Leder committed
    
    	"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)
    	}
    
    
    	currentDate := time.Now().Local().Format("2006-01-02 15:04:05")
    
    Jonas Leder's avatar
    Jonas Leder committed
    	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()
    
    
    	// Create a CSV writer
    
    Jonas Leder's avatar
    Jonas Leder committed
    	writer := csv.NewWriter(file)
    	defer writer.Flush()
    
    
    	// Check if file is empty to write header
    
    Jonas Leder's avatar
    Jonas Leder committed
    	fileInfo, err := file.Stat()
    	if err != nil {
    		panic(err)
    	}
    
    
    	// Sort keys for consistent column order
    	keys := helper.SortMapKeys(data)
    
    	// Write the header if the file is empty
    
    Jonas Leder's avatar
    Jonas Leder committed
    	if fileInfo.Size() == 0 {
    
    		header := append([]string{"Date"}, keys...)
    
    Jonas Leder's avatar
    Jonas Leder committed
    		if err := writer.Write(header); err != nil {
    			panic(err)
    		}
    	}
    
    
    	// Write data row with the current date
    
    	row := []string{currentDate}
    
    	for _, key := range keys {
    		row = append(row, helper.AnyToString(data[key]))
    
    Jonas Leder's avatar
    Jonas Leder committed
    	}
    	if err := writer.Write(row); err != nil {
    		panic(err)
    	}
    }