> 백엔드 개발 > Golang > Go에서 동적 JSON 키를 구조체 필드로 역마샬링하는 방법은 무엇입니까?

Go에서 동적 JSON 키를 구조체 필드로 역마샬링하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-19 01:26:02
원래의
953명이 탐색했습니다.

How to Unmarshal Dynamic JSON Keys into Struct Fields in Go?

Go에서 동적 JSON 키를 구조체 필드로 역마샬링

동적 JSON 키는 정적 필드 이름이 있는 구조체로 역마샬링할 때 문제가 될 수 있습니다. 다음 JSON 구성 파일을 고려하세요.

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}
로그인 후 복사

Go 구조체에서 이 JSON을 표현하려면 정적 필드 이름 대신 맵을 사용할 수 있습니다.

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
로그인 후 복사

그런 다음 JSON을 역정렬화합니다. json.Unmarshal 함수 사용:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}
로그인 후 복사

이 접근 방식을 사용하면 동적 키가 맵의 키가 되어 필요에 따라 값에 액세스할 수 있습니다.

그러나 키가 Thing 구조체의 멤버여야 하며, 언마샬링 후 키를 추가하는 루프를 작성할 수 있습니다.

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
}
로그인 후 복사

이 방법을 사용하면 키를 필드로 사용하고 동적 값을 모두 가질 수 있습니다.

위 내용은 Go에서 동적 JSON 키를 구조체 필드로 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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