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