Go で SockJS を使用する場合、JavaScript クライアントからバイト スライスとして送信された JSON データを解析するのは面倒な場合があります。サーバーはエスケープされた JSON を受け取りますが、それを通常の文字列として解析しようとします。その結果、「json: 文字列を main.Msg 型の Go 値にアンマーシャルできません」というエラーが発生します。
解決策は、strconv を利用することです。 JSON をアンマーシャリングする前に、.Unquote 関数を使用してください。この関数はエスケープ文字を削除し、Go 値に解析できる文字列を残します。
変更された例は次のとおりです。
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) }
出力:
{"channel":"buu","name":"john", "msg":"doe"} <nil> buu john doe
以上がGo でエスケープされた JSON 文字列をアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。