我在Go中使用Sockjs,但是当javascript客户端将json发送到服务器时,它会对其进行转义,并将其作为[]字节发送。我试图弄清楚如何解析json,以便我可以读取数据。但是我得到这个错误。
json:无法将字符串解组为main.Msg类型的Go值
我怎样才能解决这个问题?html.UnescapeString()无效:/
val, err := session.ReadMessage() if err != nil { break } var msg Msg err = json.Unmarshal(val, &msg) fmt.Printf("%v", val) fmt.Printf("%v", err) type Msg struct { Channel string Name string Msg string } //Output "{\"channel\":\"buu\",\"name\":\"john\", \"msg\":\"doe\"}" json: cannot unmarshal string into Go value of type main.Msg
您可能strconv.Unquote要先在JSON字符串上使用:)
strconv.Unquote
这是 @gregghz提供的示例:
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) }