一尘不染

如何在Go中解组转义的JSON字符串?

go

我在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

阅读 587

收藏
2020-07-02

共1个答案

一尘不染

您可能strconv.Unquote要先在JSON字符串上使用:)

这是 @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)
}
2020-07-02