>백엔드 개발 >Golang >Go에서 동적 키를 사용하여 JSON을 역정렬화하는 방법은 무엇입니까?

Go에서 동적 키를 사용하여 JSON을 역정렬화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 19:25:20310검색

How to Unmarshal JSON with Dynamic Keys in Go?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.