我有一个CSV文件具有以下格式的数据.
Date,RestaurantId,ItemRatings
2023-10-08,232,[{"item_id":8215117,"item_name":"The Farmers Breakfast","current_day_count":0,"current_day_sum":0,"mtd_count":1,"mtd_sum":5,"wtd_count":0,"wtd_sum":0},{"item_id":8215132,"item_name":"The Great White","current_day_count":0,"current_day_sum":0,"mtd_count":1,"mtd_sum":5,"wtd_count":0,"wtd_sum":0}]
我想解析CSV文件以将数据存储在结构中
type ItemRatings struct {
RestaurantId int `json:“item_id”`
Date string `json:"date"`
ItemData []ItemData `json:“item_data”`
}
type ItemData struct {
ItemID int `json:“item_id”`
ItemName string `json:“item_name”`
CurrentDayCount int `json:“current_day_count”`
CurrentDaySum int `json:“current_day_sum”`
MTDCount int `json:“mtd_count”`
MTDSum int `json:“mtd_sum”`
WTDCount int `json:“wtd_count”`
WTDSum int `json:“wtd_sum”`
}
POC代码:
reader := csv.NewReader(file)
reader.LazyQuotes = true
for {
record, err := reader.Read()
if err != nil {
t.Fatalf("%v", err)
}
itemDetailsJson := record[2]
var itemDetails []ItemData
err = json.Unmarshal([]byte(itemDetailsJson), &itemDetails)
if err != nil {
t.Fatalf("Error unmarshalling: %v", err)
}
fmt.Printf("Unmarshalled Array: %+v\n", itemDetails)
}
请建议一种方法来做它在Golang。面临json数据列表中使用双引号和逗号的问题。请建议代码更改或替代CSV格式,可用于实现CSV中restaurantId字段汇总数据的目标。
Edit 1 - item_name甚至可以包含特殊字符,如“或+或/或[]。6”披萨
4条答案
按热度按时间h6my8fg21#
由于您的数据既不是CSV也不是JSON,因此您希望以不同的方式处理它。而不是试图解析为CSV,恕我直言,你应该首先逐行阅读,然后将行解析为部分。即:
示例输出来自:
是这样的:
nc1teljy2#
你可以在Go中使用encoding/csv和encoding/json包来解析CSV数据并将其解组到你的结构中。你需要从CSV中解析JSON数据,然后将其解组到ItemData结构中。
wkyowqbh3#
由于编码/csv,csv文件更新时使用了双引号。我花了一些时间,所以我把它作为一种替代方法添加到这里。
CSV(test.csv):
验证码:
输出:
v64noz0r4#
这就是你想要的吗
data.csv
脚本。去
输出