如果我将数据发送到json文件,它将发送客户的所有数据,而不发送我的订单数据。我认为我的代码无法正确转换类型,但是找不到位置。我认为它位于Pizzamap中的某个位置,但是我找不到错误。
处理程序:
func bestellingHandler(writer http.ResponseWriter, request *http.Request) {
log.Println("Viewing bestellingen")
bestellingTemplate, _ := template.ParseFiles("./templates/Bestellingen.htm")
// laad de pizza's uit de data file
fmt.Println(request.Method)
fmt.Println(request.Form)
fmt.Println(request.PostFormValue("name"))
filepizza := "./data/pizzas.json"
Readpizza, err := ioutil.ReadFile(filepizza)
var Pizzaslice []Pizza
err = json.Unmarshal(Readpizza, &Pizzaslice)
if err != nil {
panic(err)
}
Pizzamap := make(map[string]PizzaOrder)
var totaalprijs float64
for i := 0; i < (len(Pizzaslice)); i++ {
index := strconv.Itoa(i)
aantalpizzas, _ := strconv.Atoi(request.FormValue("aantal_" + Pizzaslice[i].Name))
prijspizzas, _ := strconv.ParseFloat(request.FormValue("price"+Pizzaslice[i].Name), 64)
if aantalpizzas != 0 {
Pizzabesteld[index] = PizzaOrder{
Naam: request.FormValue("name" + Pizzaslice[i].Name),
Price: prijspizzas,
Aantal: aantalpizzas,
}
fmt.Println(Pizzabesteld)
totaalprijs += float64(aantalpizzas) * prijspizzas
}
}
filebestelling := "./data/deck.json"
Readbestelling, err := ioutil.ReadFile(filebestelling)
var klantmap map[string]Klant
err = json.Unmarshal(Readbestelling, &klantmap)
if err != nil {
panic(err)
}
index := strconv.Itoa(len(klantmap))
klantmap[index] = Klant{
Naam: request.FormValue("naam"),
Tussenvoegsel: request.FormValue("tussenv"),
Achternaam: request.FormValue("lname"),
Adres: request.FormValue("adress"),
Telefoonnummer: request.FormValue("phone"),
Postcode: request.FormValue("zipcode"),
Email: request.FormValue("email"),
Status: "Je bestelling wordt bereid",
Totaalprijs: totaalprijs,
Order: Pizzamap,
}
Resultaat, err := json.MarshalIndent(klantmap, "", "\t")
if err != nil {
panic(err)
}
ioutil.WriteFile(filebestelling, Resultaat, 0644)
fmt.Sprintln(klantmap[index])
bestellingTemplate.Execute(writer, klantmap[index])
}
HTML:
<fieldset>
<legend>Je bestelling:</legend>
<ul>
<li>
<p>Naam: {{ .Naam }}<br>
Tussenvoegsel: {{ .Tussenvoegsel }}<br>
Achternaam: {{ .Achternaam }}<br>
E-mail: {{ .Email }}<br>
Telefoonnummer: {{ .Telefoonnummer }}<br>
Status: {{ .Status }}<br>
<fieldset>
<ul>
{{range $key, $value := .Order}}
<li>
Pizzanaam: {{ $value.Naam }} <br>
Prijs: €{{ $value.Price | printf "%.2f" }} <br>
Aantal: {{ $value.Aantal }} <br>
</li>
{{end}}
</ul>
</fieldset>
</p>
</li>
<li>Totaal: €{{ .totaalprijs | printf "%.2f" }}</li>
</ul>
</fieldset>
结构:
type PizzaOrder struct {
Naam string
Price float64
Aantal int
}
这就是我的json文件中显示的内容
json:
"0": {
"Naam": "Lucas",
"Tussenvoegsel": "de",
"Achternaam": "Groot",
"Adres": "Margrietlaan 37",
"Postcode": "6713PL",
"Telefoonnummer": "03958321",
"Email": "k@gmail.com",
"Status": "Je bestelling wordt bereid",
"Totaalprijs": 0,
"Order": {
"0": {
"Naam": "salami",
"Price": 0,
"Aantal": 2
}
}
}
答案 0 :(得分:1)
无法将字符串解组到Go结构字段PizzaOrder中。float64类型的价格
这清楚表明字符串正试图解码为浮点数
查看您的类型定义:
type PizzaOrder struct {
Naam string
Price float64 // <-- expects float
Aantal int // <-- expects int
}
您的输入实际上不会被解组,因为Price
和Aantal
分别是string
而不是float64
和int
"Order": {
"0": {
"Naam": "",
"Price": "", // <-- string
"Aantal": "" // <-- string
}
}
应该是
"Order": {
"0": {
"Naam": "",
"Price": 0,
"Aantal": 0
}
}
编辑1:
不应该
Pizzabesteld[index] = PizzaOrder{
是
Pizzamap[index] = PizzaOrder{
?您正在尝试输出Pizzamap
,但实际上它是一个空地图。