> 백엔드 개발 > Golang > Go에서 JSON 맵을 부분적으로 효율적으로 구문 분석하는 방법은 무엇입니까?

Go에서 JSON 맵을 부분적으로 효율적으로 구문 분석하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-26 07:45:09
원래의
252명이 탐색했습니다.

How to Efficiently Parse Partially a JSON Map in Go?

Go에서 JSON 데이터를 맵으로 구문 분석

Websocket 서버는 종종 값 유형을 나타내는 키-값 쌍으로 래핑된 JSON 데이터를 수신합니다. . "encoding/json" 패키지는 편리한 역마샬링 기능을 제공하지만 추가 처리를 위해 JSON 데이터를 부분적으로 맵으로 구문 분석해야 합니다.

map[string]json.RawMessage를 사용하는 접근 방식

부분적 언마샬링을 달성하려면 map[string]json.RawMessage를 활용할 수 있습니다. 이 접근 방식을 사용하면 JSON 데이터를 맵으로 역마샬링할 수 있으며, 키는 속성 이름이고 값은 구문 분석되지 않은 JSON 데이터입니다.

import (
    "encoding/json"
    "fmt"
)

func main() {
    data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`)

    var objmap map[string]json.RawMessage
    err := json.Unmarshal(data, &objmap)
    if err != nil {
        fmt.Printf("Error unmarshaling JSON: %v", err)
        return
    }

    // Unpack Individual Values

    // Parsing sendMsg
    var s sendMsg
    err = json.Unmarshal(objmap["sendMsg"], &s)
    if err != nil {
        fmt.Printf("Error unmarshaling 'sendMsg': %v", err)
        return
    }
    fmt.Println("sendMsg:", s)

    // Parsing say
    var str string
    err = json.Unmarshal(objmap["say"], &str)
    if err != nil {
        fmt.Printf("Error unmarshaling 'say': %v", err)
        return
    }
    fmt.Println("say:", str)
}

type sendMsg struct {
    User string
    Msg  string
}
로그인 후 복사

이 접근 방식에서 objmap에는 "sendMsg" 키가 포함됩니다. "를 sendMsg 개체를 나타내는 원시 JSON 데이터인 값으로 바꿉니다. 이 데이터를 sendMsg 구조체로 추가로 언마샬링하면 개별 필드(User 및 Msg)에 액세스할 수 있습니다.

참고: 성공적으로 언마샬링하려면 sendMsg 구조체의 필드를 내보내는 것을 잊지 마세요. (예: 사용자 및 메시지).

위 내용은 Go에서 JSON 맵을 부분적으로 효율적으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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