> 백엔드 개발 > Golang > JSON Websocket 데이터에서 중첩된 인코딩 문자열을 처리하는 방법은 무엇입니까?

JSON Websocket 데이터에서 중첩된 인코딩 문자열을 처리하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-05 01:54:08
원래의
543명이 탐색했습니다.

How to Handle Nested Encoded Strings in JSON Websocket Data?

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

문제:

웹소켓 데이터를 JSON 형식으로 구문 분석할 때 사용자에게 오류가 발생할 수 있습니다. JSON 구문을 위반하는 중첩된 인코딩 JSON 문자열로 인해 발생합니다. 예를 들어, "텍스트" 필드의 문자열 값에는 "" 및 "<"와 같은 HTML 엔터티가 포함되어 디코더가 실패할 수 있습니다.

해결책:

JSON에서 중첩된 인코딩 문자열을 처리하려면 애플리케이션이 데이터를 두 부분으로 디코딩해야 합니다. 단계:

  1. 첫 번째 패스: 중첩된 인코딩 문자열을 무시하고 일반 텍스트로 처리하는 기본 구조체를 사용하여 외부 JSON 레이어를 디코딩합니다.
  2. 두 번째 패스: 외부 레이어 데이터를 얻은 후 "args" 내에 중첩된 JSON 문자열을 디코딩합니다. field.

다음은 이 접근 방식을 보여주는 예제 코드 조각입니다.

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"`
}

// Input JSON string
str := `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"https://play.spotify.com/browse\",\"time\":1455397119}}"]}`

var m main
if err := json.Unmarshal([]byte(str), &m); err != nil {
    log.Fatal(err)
}
var args arg
if err := json.Unmarshal([]byte(m.Args[0]), &args); err != nil {
    log.Fatal(err)
}

이 예제에서 첫 번째 패스는 외부 JSON 문자열을 기본 구조체로 디코딩하여 수행됩니다. "name" 및 "args" 필드가 포함되어 있습니다. 그런 다음 "args" 필드는 두 번째 단계에서 별도의 JSON 문자열로 구문 분석되어 HTML 엔터티를 제거하고 유효한 arg 개체로 복원합니다. 이 접근 방식을 사용하면 모든 JSON 데이터가 올바르게 처리되고 오류가 방지됩니다.

위 내용은 JSON Websocket 데이터에서 중첩된 인코딩 문자열을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿