Go で Sockjs を使用する場合、JavaScript クライアントが JSON データをエスケープ文字列として送信するときに問題が発生する可能性があります。これにより、「json: 文字列を main.Msg 型の Go 値にアンマーシャルできません。」のような解析エラーが発生する可能性があります。
この問題を回避するには、strconv を使用して JSON 文字列を前処理します。引用を解除します。その仕組みは次のとおりです。
package main import ( "encoding/json" "fmt" "strconv" ) type Msg struct { Channel string Name string Msg string } func main() { var msg Msg val := []byte(`"{\"channel\":\"buu\",\"name\":\"john\", \"msg\":\"doe\"}"`) s, _ := strconv.Unquote(string(val)) // Unmarshal the unquoted JSON string err := json.Unmarshal([]byte(s), &msg) fmt.Println(s) fmt.Println(err) fmt.Println(msg.Channel, msg.Name, msg.Msg) }
この例では、strconv.Unquote を使用して JSON 文字列からエスケープ文字を削除します。引用符で囲まれなくなったら、Msg 構造体へのアンマーシャリングに進みます。このアプローチにより解析エラーが解決され、データに正しくアクセスできるようになります。
以上がSockJS を使用して Go でエスケープされた JSON 文字列をアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。