인터페이스 변수를 사용하여 JSON을 특정 구조체로 역마샬링하는 방법
문제:
언제 JSON을 인터페이스 변수로 역마샬링하면 인코딩/json 패키지는 이를 맵으로 해석합니다. 대신 특정 구조체를 사용하도록 어떻게 지시할 수 있나요?
설명:
JSON 패키지에서는 역마샬링할 때 대상으로 삼을 구체적인 유형이 필요합니다. 인터페이스{} 변수를 전달해도 충분한 정보가 제공되지 않으며 패키지의 기본값은 객체의 경우 map[string]interface{}이고 배열의 경우 []interface{}입니다.
해결책:
json.Unmarshal이 인터페이스 변수를 사용하여 구체적인 구조체 유형으로 역마샬링하도록 지시하는 기본 제공 방법은 없습니다. 그러나 해결 방법이 있습니다.
func getFoo() interface{} { return &Foo{"bar"} }
err := json.Unmarshal(jsonBytes, fooInterface)
fmt.Printf("%T %+v", fooInterface, fooInterface)
예:
다음 코드는 기술을 보여줍니다.
package main import ( "encoding/json" "fmt" ) type Foo struct { Bar string `json:"bar"` } func getFoo() interface{} { return &Foo{"bar"} } func main() { fooInterface := getFoo() myJSON := `{"bar":"This is the new value of bar"}` jsonBytes := []byte(myJSON) err := json.Unmarshal(jsonBytes, fooInterface) if err != nil { fmt.Println(err) } fmt.Printf("%T %+v", fooInterface, fooInterface) // prints: *main.Foo &{Bar:This is the new value of bar} }
위 내용은 Go에서 인터페이스 변수를 사용하여 JSON을 특정 구조체로 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!