> 백엔드 개발 > Golang > Go의 `encoding/json` 패키지가 JSON을 맵으로 부분적으로 비정렬화할 수 있나요?

Go의 `encoding/json` 패키지가 JSON을 맵으로 부분적으로 비정렬화할 수 있나요?

DDD
풀어 주다: 2024-12-29 04:27:13
원래의
650명이 탐색했습니다.

Can Go's `encoding/json` Package Partially Unmarshal JSON into a Map?

Go에서 JSON을 맵으로 부분적으로 비정렬화

문제:

다음 시나리오를 고려해보세요. Go 서버는 키/값 쌍이 있는 객체 내에 캡슐화된 JSON 데이터를 받습니다. 각 키는 특정 유형의 값에 해당하며 서버는 키에 따라 해당 값을 적절한 구조체 유형으로 역마샬링해야 합니다. 문제는 "encoding/json" 패키지를 사용하여 이를 달성할 수 있느냐는 것입니다.

해결책:

이를 달성하려면 JSON 데이터를 부분적으로 역마샬링하여 키-값 쌍의 맵. 여기서 키는 문자열이고 값은 json.RawMessage 인스턴스입니다. RawMessage는 처리되지 않은 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 {
        // Handle error
    }

    // Example: Unmarshal sendMsg value into a struct
    type sendMsg struct {
        User string
        Msg  string
    }

    var s sendMsg
    err = json.Unmarshal(objmap["sendMsg"], &s)
    if err != nil {
        // Handle error
    }
    fmt.Println(s)
}
로그인 후 복사

사용 예:

위의 예에서 JSON 데이터는 먼저 정렬 해제되어 지도[문자열]json.RawMessage. 그런 다음 sendMsg와 같은 특정 값을 구문 분석하기 위해 해당 RawMessage를 프로그램에 정의된 구조체로 추가로 역마샬링할 수 있습니다.

이 기술을 사용하면 여러 키-값 쌍이 있는 JSON 데이터를 유연하고 효율적으로 처리할 수 있습니다. 값은 키에 따라 다른 유형으로 역마샬링될 수 있습니다.

위 내용은 Go의 `encoding/json` 패키지가 JSON을 맵으로 부분적으로 비정렬화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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