Go에서 SockJS를 사용할 때 JavaScript 클라이언트에서 전송된 JSON 데이터를 바이트 슬라이스로 구문 분석하는 것은 문제가 될 수 있습니다. 서버는 이스케이프된 JSON을 수신하지만 이를 일반 문자열로 구문 분석하려고 시도하여 "json: 문자열을 main.Msg 유형의 Go 값으로 역마샬링할 수 없습니다."라는 오류가 발생합니다.
해결책은 strconv를 활용하는 데 있습니다. .Unquote 함수를 사용하여 JSON을 비정렬화합니다. 이 함수는 이스케이프 문자를 제거하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!