>백엔드 개발 >Golang >Go 구조체에서 임의의 JSON 키를 처리하는 방법은 무엇입니까?

Go 구조체에서 임의의 JSON 키를 처리하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-26 16:04:10977검색

How to Handle Arbitrary JSON Keys in Go Structs?

Go 구조체에서 임의의 JSON 키 처리

JSON 응답에는 Go 구조체에서 정적으로 정의할 수 없는 다양한 키가 포함되어 있습니다. 이 문제를 해결하려면 동적 키-값 쌍을 허용하는 맵 데이터 구조를 사용하는 것이 좋습니다.

동적 키에 맵 사용

다음 코드는 다음과 같은 구조체를 정의합니다. 맵을 사용하여 임의의 키-값 쌍을 나타냅니다.

type Items map[string][]ImageUrl

여기서 Items는 문자열(키 JSON에서)를 ImageUrl 구조체의 조각으로 변환합니다. 각 ImageUrl 구조체는 해당 크기와 함께 단일 이미지 URL을 나타냅니다.

샘플 사용

이 수정된 코드 버전은 Items 구조체를 사용하는 방법을 보여줍니다.

type ImageUrl struct {
    Url string
    Width, Height int
}

type Items map[string][]ImageUrl

func main() {
    json := `{"items":
[{"name": "thing",
  "image_urls": {
    "50x100": [{
      "url": "http://site.com/images/1/50x100.jpg",
      "width": 50,
      "height": 100
    }, {
      "url": "http://site.com/images/2/50x100.jpg",
      "width": 50,
      "height": 100
    }],
    "200x300": [{
      "url": "http://site.com/images/1/200x300.jpg",
      "width": 200,
      "height": 300
    }],
    "400x520": [{
      "url": "http://site.com/images/1/400x520.jpg",
      "width": 400,
      "height": 520
    }]
  }
}
}`

    var items Items
    if err := json.Unmarshal([]byte(json), &items); err != nil {
        // Handle error
    }

    fmt.Println(items) // Prints the map containing the keys and values
}

이 예에서 json.Unmarshal 함수는 적절한 키-값으로 Items 맵을 자동으로 채웁니다. 쌍. 그런 다음 필요에 따라 데이터에 액세스하고 조작할 수 있습니다.

참고: 이 접근 방식에서는 JSON에 중첩된 키가 일관적이라고 가정합니다. 그렇지 않은 경우 중첩된 맵이나 맵 조각과 같은 더 복잡한 데이터 구조를 사용해야 할 수도 있습니다.

위 내용은 Go 구조체에서 임의의 JSON 키를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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