package utils
import (
"bytes"
"encoding/csv"
)
func CsvToJson(pool bool, record []byte) ([]map[string]any, error) {
csvReader := csv.NewReader(bytes.NewBuffer(record))
csvRecords, err := csvReader.ReadAll()
if err != nil {
return nil, err
}
headers := csvRecords[:1][0]
recordsLength := len(csvRecords)
records := csvRecords[1:recordsLength]
return reformatCsv(headers, records), nil
}
func reformatCsv(headers []string, record [][]string) []map[string]any {
var (
csvRecord map[string]any = make(map[string]any)
csvRecordLength int = len(record)
)
if csvRecordLength == 0 {
return nil
}
if csvRecordLength == 1 {
for i, v := range headers {
csvRecord[v] = record[0][i]
}
return []map[string]interface{}{csvRecord}
}
mid := len(record) / 2
left := reformatCsv(headers, record[:mid])
right := reformatCsv(headers, record[mid:])
return append(left, right...)
}