Viper/JSON 언마샬링의 동적 키 처리
미리 결정된 형식에서 벗어난 JSON 데이터를 처리할 때 Go에서 언마샬링하는 것이 어려울 수 있습니다. . 다음과 같이 동적 키가 있는 JSON 구성 파일을 고려해 보세요.
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
이 데이터를 동적 키가 있는 Go 구조체로 역마샬링하려면 맵을 활용하는 것이 한 가지 접근 방식입니다.
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
map[string]Thing을 사용하면 결과 구조체가 원하는 수의 동적 키를 처리할 수 있습니다. 다음을 사용하여 데이터 역마샬링을 수행합니다.
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
이 접근 방식을 사용하면 JSON과 Viper 모두에서 동적 키를 간단하게 역마샬링할 수 있습니다(viper.Get("things")를 사용하여 Thing 값의 배열 가져오기).
그러나 키 자체가 구조체의 멤버여야 하는 경우 정렬 해제 후 루프를 사용하여 업데이트할 수 있습니다. fields:
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 }
이를 통해 JSON 데이터의 원래 동적 특성을 유지하면서 키를 구조체에 통합할 수 있습니다.
위 내용은 Go에서 동적 키를 사용하여 JSON을 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!