중첩된 인코딩 문자열로 JSON 디코딩
제공된 시나리오에서 WebSocket 정보는 중첩된 JSON을 포함하는 JSON 응답 형식으로 수신됩니다. -인코딩된 문자열. 목표는 이 JSON을 사용자 정의 Go 데이터 구조로 디코딩하는 것입니다.
중첩된 JSON 문자열의 "텍스트" 필드에 있는 잘못된 문자로 인해 초기 디코딩 시도가 실패합니다. 값에 유효한 JSON 구문이 아닌 HTML 마크업이 포함되어 있기 때문입니다.
2단계 디코딩
이 문제를 극복하려면 디코딩 프로세스를 수행해야 합니다. 두 단계로:
코드 예
업데이트된 코드는 다음과 같습니다. 2단계 디코딩 프로세스를 구현하는 스니펫:
type main struct { Name string `json:"name"` Args []string `json:"args"` } type arg struct { Method string `json:"method"` Params par `json:"params"` } type par struct { Channel string `json:"channel,omitempty"` Name string `json:"name,omitempty"` NameColor string `json:"nameColor,omitempty"` Text string `json:"text,omitempty"` Time int64 `json:"time,omitempty"` } str := `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"<a href=\\"https://play.spotify.com/browse\\" target=\\"_blank\\">https://play.spotify.com/browse</a>\",\"time\":1455397119}}"]}` var m main if err := json.Unmarshal([]byte(str), &m); err != nil { log.Fatal(err) } for _, argStr := range m.Args { var args arg if err := json.Unmarshal([]byte(argStr), &args); err != nil { log.Fatal(err) } fmt.Println(args) }
이 코드 애플리케이션이 인코딩된 문자열이 포함된 JSON 응답에서 원하는 데이터를 추출할 수 있도록 하는 중첩된 디코딩 프로세스를 보여줍니다.
위 내용은 Go에서 중첩된 JSON 인코딩 문자열을 어떻게 디코딩하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!