Bei der Verwendung von SockJS mit Go kann das Parsen von JSON-Daten, die von einem JavaScript-Client als Byte-Slice gesendet werden, problematisch sein. Der Server empfängt den maskierten JSON-Code, versucht ihn jedoch als gewöhnlichen String zu analysieren, was zu dem Fehler „JSON: String kann nicht in Go-Wert vom Typ main.Msg entmarshaliert werden“ führt.
Die Lösung liegt in der Verwendung von strconv .Unquote-Funktion, bevor Sie versuchen, das JSON zu entmarshalieren. Diese Funktion entfernt die Escape-Zeichen und hinterlässt eine Zeichenfolge, die in einen Go-Wert geparst werden kann.
Hier ist ein modifiziertes Beispiel:
package main import ( "encoding/json" "fmt" "strconv" ) type Msg struct { Channel string Name string Msg string } func main() { var msg Msg var val []byte = []byte(`"{\"channel\":\"buu\",\"name\":\"john\", \"msg\":\"doe\"}"`) s, _ := strconv.Unquote(string(val)) err := json.Unmarshal([]byte(s), &msg) fmt.Println(s) fmt.Println(err) fmt.Println(msg.Channel, msg.Name, msg.Msg) }
Ausgabe:
{"channel":"buu","name":"john", "msg":"doe"} <nil> buu john doe
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich entkommene JSON-Strings in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!