> 백엔드 개발 > Golang > Go에서 동적 배열 구조를 사용하여 JSON을 효율적으로 역마샬링하는 방법은 무엇입니까?

Go에서 동적 배열 구조를 사용하여 JSON을 효율적으로 역마샬링하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-21 14:43:11
원래의
679명이 탐색했습니다.

How to Efficiently Unmarshal JSON with Dynamic Array Structures in Go?

동적 배열 구조로 JSON 역마샬링

타사 소스에서 JSON 데이터를 검색할 때 데이터 구조는 다양할 수 있으며 때로는 배열과 때로는 그렇지 않습니다. 이는 Go의 json.Unmarshal 함수를 사용할 때 특정 구조체가 JSON 구조와 일치할 것으로 예상하기 때문에 문제가 될 수 있습니다.

이를 처리하는 일반적인 접근 방식은 다음과 같은 슬라이스가 있는 보조 구조체를 만드는 것입니다.

type ResponseWithSlice struct {
    Gwrcmds struct {
        Gwrcmd []struct { // Nested struct now a slice
            Gcmd  string
            Gdata struct {
                Gip struct {
                    Version string
                }
            }
        }
    }
}
로그인 후 복사

이 방법은 작동하지만 구조체를 복제해야 하므로 번거로울 수 있습니다.

더 보기 다용도 솔루션에는 json.RawMessage 사용이 포함됩니다.

type Response struct {
    RawGwrcmd json.RawMessage `json:"gwrcmds"`
}
로그인 후 복사

이 접근 방식을 사용하면 gwrcmds 필드가 원시 JSON 메시지로 저장되므로 이를 엿보고 그에 따라 역마샬링할 수 있습니다.

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawGwrcmd); err != nil {
        return err
    }
    if r.RawGwrcmd[0] == '[' { // Check if it's an array
        return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd)
    }
    return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd) // Otherwise, treat it as a single struct
}
로그인 후 복사

이 방법을 사용하면 추가 구조체 없이 배열 구조와 비배열 구조를 모두 처리할 수 있습니다.

위 내용은 Go에서 동적 배열 구조를 사용하여 JSON을 효율적으로 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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