使用gocsv解析带引号表头的CSV数据时字段映射失败
解决gocsv无法解析带特殊格式表头的问题
你的问题出在结构体标签和CSV表头的匹配上。CSV里的表头"status (active, expired)"被解析后,外层的双引号会被自动去掉,实际用于匹配的表头名称是status (active, expired)(包含空格、括号和逗号)。
修正方案
定义结构体时,标签要精确匹配解析后的表头内容,包括所有空格和标点:
type Record struct { Status string `csv:"status (active, expired)"` // 其他字段按同样规则定义 }
完整示例代码
package main import ( "bytes" "fmt" "github.com/gocarina/gocsv" ) type Record struct { Status string `csv:"status (active, expired)"` Name string `csv:"name"` } func main() { csvData := ` "status (active, expired)","name" "active","Alice" "expired","Bob" ` var records []Record err := gocsv.Unmarshal(bytes.NewReader([]byte(csvData)), &records) if err != nil { panic(err) } fmt.Printf("%+v\n", records) }
关键注意点
- 标签内容必须和解析后的表头完全一致,不能少空格或改标点位置
- 如果表头存在大小写不一致的情况,可以添加
gocsv.WithLowerCaseHeaders()选项忽略大小写,但精确匹配更稳妥 - 不要在标签里加外层双引号,因为CSV解析器已经去掉了表头字段的外层引号
内容的提问来源于stack exchange,提问作者hcp
相关产品推荐
相关产品推荐

