Viper 및 Go 구조체를 사용하여 동적 JSON 키 비마샬링
Go에서는 동적 키로 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 }
구조체를 정의한 후에는 다음과 같은 JSON 데이터:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
객체 키의 이름이 "Thing" 구조체의 필드여야 하는 경우 정렬 해제 후 루프를 추가하여 할당할 수 있습니다.
// Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
또는 "Decode" 메서드를 재정의하여 사용자 지정 JSON 디코더를 사용하여 동적 키를 처리할 수 있습니다. 이 접근 방식에 대한 자세한 내용은 공식 Go 문서를 참조하세요.
이러한 기술을 사용하면 동적 JSON 키를 Go 구조체로 효과적으로 역마샬링하여 복잡한 구성 파일 및 데이터 구조로 작업할 수 있습니다.
위 내용은 Viper 및 Go 구조체를 사용하여 동적 JSON 키를 어떻게 역마샬링합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!