Go에서는 구조체 필드 내에서 동적 JSON 키를 처리하는 것이 어려울 수 있습니다. 이에 대해 자세히 알아보고 Viper 라이브러리를 사용하여 포괄적인 솔루션을 제공하겠습니다.
문제 설명
동적 키가 있는 JSON 구성 파일을 고려하세요.
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
이 구성을 구조체로 구문 분석하려면 다음을 정의할 수 있습니다.
type Thing struct { Name string `?????` Key1 string `json:"key2"` Key2 string `json:"key2"` }
그러나 질문이 생깁니다. 동적 키를 구조체 필드 이름으로 어떻게 역마샬링할 수 있습니까?
해결책
동적 키를 처리하려면 맵 사용을 고려하세요.
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
다음과 같이 비정렬화하세요:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
Playground 예제
키가 구조체의 멤버여야 하는 경우 정렬 해제 후 루프를 사용하여 키를 추가할 수 있습니다.
type Thing struct { Name string `json:"-"` // Add the field Key1 string Key2 string } ... // Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
플레이그라운드 예제
이러한 기술을 사용하면 Viper와 같은 라이브러리를 사용하는 경우에도 동적 JSON 키를 Go의 구조체 필드로 효과적으로 역마샬링할 수 있습니다.
위 내용은 Go에서 Dynamic Viper 또는 JSON 키를 구조체 필드로 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!