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

Go에서 동적 키를 사용하여 JSON을 구조체 필드로 역마샬링하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-16 00:07:03
원래의
606명이 탐색했습니다.

How to Unmarshal JSON with Dynamic Keys into Struct Fields in Go?

Go에서 동적 키를 구조체 필드로 역마샬링

미리 결정된 구조를 따르지 않는 JSON 데이터로 작업할 때 역마샬링이 더 많아집니다. 도전적이다. 이 경우 "things"라는 개체 내에 동적 키가 포함된 JSON 구성 파일이 있습니다.

이 문제를 해결하기 위한 한 가지 해결책은 구조체 내의 맵을 사용하여 동적 키를 캡처하는 것입니다. 예는 다음과 같습니다.

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
로그인 후 복사

각 키에 대해 특정 구조체 필드를 정의하는 대신 "Things" 필드는 키-값 쌍을 저장하는 맵입니다. 여기서 키는 동적 키입니다.

이 접근 방식을 사용하여 JSON 데이터를 역마샬링하려면 다음과 같이 하면 됩니다.

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}
로그인 후 복사

이렇게 하면 JSON이 "X" 구조체로 역마샬링되고 동적 키가 내부의 적절한 구조체 인스턴스에 매핑됩니다. "사물" 맵.

그러나 키 값을 맵 키의 일부가 아닌 구조체의 필드로 사용하려는 경우 다음 접근 방식을 사용할 수 있습니다.

type Thing struct {
    Name string `json:"-"` // <-- add this field
    Key1 string
    Key2 string
}

...

// Update the name field after unmarshalling
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}
로그인 후 복사

정렬화 해제 중에 무시할 수 있도록 "이름" 필드에 "-`json" 태그를 추가하는 작업이 포함됩니다. 언마샬링 후 루프를 사용하여 맵에 있는 각 구조체 인스턴스의 "이름" 필드에 동적 키를 할당합니다.

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

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