>백엔드 개발 >Golang >Go에서 가변 데이터 유형(객체 또는 문자열)을 사용하여 JSON 역마샬링을 어떻게 처리할 수 있나요?

Go에서 가변 데이터 유형(객체 또는 문자열)을 사용하여 JSON 역마샬링을 어떻게 처리할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-03 00:51:15226검색

How Can I Handle JSON Unmarshaling with Variable Data Types (Objects or Strings) in Go?

Go에서 객체 또는 문자열 배열을 사용하여 JSON 언마샬링 처리

Go에서 JSON을 구조체로 언마샬링할 때 다음을 포함할 수 있는 필드가 나타날 수 있습니다. 요청마다 다양한 유형(객체 또는 문자열). 예를 들어, "mykey"라는 필드는 인라인 개체를 포함할 수도 있고 특정 경로의 개체에 대한 참조를 포함할 수도 있습니다.

Go-Idiomatic Solution

관용적인 Go 이 상황을 처리하기 위한 접근 방식은 인터페이스{} 값의 조각인 유형의 필드를 사용하여 구조체를 정의하는 것입니다. 이를 통해 Go는 수신 JSON을 기반으로 객체와 문자열을 적절한 유형으로 자동 디코딩하므로 필드가 객체와 문자열을 모두 보유할 수 있습니다. 다음 코드는 이를 보여줍니다.

type Data struct {
    MyKey []interface{} `json:"mykey"`
}

유형 검사

JSON을 역마샬링한 후 유형 스위치를 사용하여 슬라이스의 객체와 문자열을 구별할 수 있습니다.

for i, v := range data.MyKey {
    switch x := v.(type) {
    case string:
        fmt.Println("Got a string: ", x)
    case map[string]interface{}:
        fmt.Printf("Got an object: %#v\n", x)
    }
}

이를 통해 구조적이고 효율적인 방식으로 두 가지 유형의 값을 모두 처리할 수 있습니다. 방식.

다음 JSON을 고려하세요.

{
  "mykey": [
    {obj1}, 
    {obj2}
  ]
}

이 JSON을 데이터 구조체로 언마샬링한 후 MyKey 슬라이스에는 두 개가 포함됩니다. 각 요소는 map[string]interface{} 유형입니다.

또는, JSON에 객체에 대한 참조가 포함된 경우:

{
  "mykey": [
    "/obj1/is/at/this/path", 
    "/obj2/is/at/this/other/path"
  ]
}

MyKey 슬라이스에는 각각 문자열 유형인 두 개의 요소가 포함됩니다.

위 내용은 Go에서 가변 데이터 유형(객체 또는 문자열)을 사용하여 JSON 역마샬링을 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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