> 백엔드 개발 > Golang > Viper 및 Go 구조체를 사용하여 동적 JSON 키를 어떻게 역마샬링합니까?

Viper 및 Go 구조체를 사용하여 동적 JSON 키를 어떻게 역마샬링합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-20 11:33:02
원래의
529명이 탐색했습니다.

How do you unmarshal dynamic JSON keys with Viper and Go structs?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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