Ich habe, aus welchem Grund auch immer, beim Versuch, eine einfache Rest-API in Go mit MySQL-Speicher zu bauen, fügte ein zweites json.Marshal, die Doppel-Encoding ist und Ergebnisse mit Escape-Anführungszeichen und eine solche. Ich könnte die Zitate streichen, aber ich denke, ich sollte nicht zwei json.Marshal Dinge an erster Stelle passiert.Korrekt entfernen zweiten Json.Marshal in Go
Das Problem ist zweifach - 1) das ist richtig zu entfernen (lehnt sich an die erste, weil "Ergebnis" sollte das größere Array sein) und 2) wie man den Code nach dem Entfernen funktioniert? Ich kann nicht einfach den ersten entfernen, da ich anfange, alle Arten von Fehlern zu begegnen. Hier sind die relevanten Teile des Codes:
type Volume struct {
Id int
Name string
Description string
}
... vorwärts springen ....
var result = make([]string,1000)
switch request.Method {
case "GET":
name := request.URL.Query().Get("name")
stmt, err := db.Prepare("select id, name, description from idm_assets.VOLUMES where name = ?")
if err != nil{
fmt.Print(err);
}
rows, err := stmt.Query(name)
if err != nil {
fmt.Print(err)
}
i := 0
for rows.Next() {
var name string
var id int
var description string
err = rows.Scan(&id, &name, &description)
if err != nil {
fmt.Println("Error scanning: " + err.Error())
return
}
volume := &Volume{Id: id,Name:name,Description: description}
Hier ist der erste json.Marshal ...
b, err := json.Marshal(volume)
fmt.Println(b)
if err != nil {
fmt.Println(err)
return
}
result[i] = fmt.Sprintf("%s", string(b))
i++
}
result = result[:i]
. ..Spring andere Fälle für PUT, DELETE, Etc. Zum zweiten json.Marshal ...
default:
}
json, err := json.Marshal(result)
if err != nil {
fmt.Println(err)
return
}
fmt.Fprintf(response,"'%v'\n",string(json))
Vielen Dank. Das brachte mich definitiv in die richtige Richtung. Ich hatte zuvor versucht, mich an die Scheibe anzuhängen, aber ich tat es falsch und konnte den Fehler erst sehen, wenn ich mit dieser Scheibe verglichen habe. Vielen Dank! – user1514992