>백엔드 개발 >Golang >Go에서 중첩된 JSON 인코딩 문자열을 어떻게 디코딩하나요?

Go에서 중첩된 JSON 인코딩 문자열을 어떻게 디코딩하나요?

Susan Sarandon
Susan Sarandon원래의
2024-12-05 08:12:13423검색

How to Decode Nested JSON-Encoded Strings in Go?

중첩된 인코딩 문자열로 JSON 디코딩

제공된 시나리오에서 WebSocket 정보는 중첩된 JSON을 포함하는 JSON 응답 형식으로 수신됩니다. -인코딩된 문자열. 목표는 이 JSON을 사용자 정의 Go 데이터 구조로 디코딩하는 것입니다.

중첩된 JSON 문자열의 "텍스트" 필드에 있는 잘못된 문자로 인해 초기 디코딩 시도가 실패합니다. 값에 유효한 JSON 구문이 아닌 HTML 마크업이 포함되어 있기 때문입니다.

2단계 디코딩

이 문제를 극복하려면 디코딩 프로세스를 수행해야 합니다. 두 단계로:

  1. 외부 JSON 응답을 "args"에 대한 문자열 조각을 포함하는 데이터 구조로 디코딩합니다. field.
  2. "args" 슬라이스를 반복하고 각 개별 문자열을 JSON으로 디코딩합니다.

코드 예

업데이트된 코드는 다음과 같습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.