是否有可能解開JSON到反射而不是硬編碼原始類型的結構?Unmarshal json反射結構
package main
import (
"fmt"
"encoding/json"
"reflect"
)
type Employee struct {
Firstname string `json:"firstname"`
}
func main() {
//Original struct
orig := new(Employee)
t := reflect.TypeOf(orig)
v := reflect.New(t.Elem())
//Reflected struct
new := v.Elem().Interface().(Employee)
// Unmarshal to reflected struct
json.Unmarshal([]byte("{\"firstname\": \"bender\"}"), &new)
fmt.Printf("%+v\n", new)
}
在這個例子中,我使用了cast到Employee
。但是如果我不知道這種類型呢?
當我只使用v
進行非標註時,結構將被清零。
json.Unmarshal([]byte("{\"firstname\": \"bender\"}"), v)
當我省略演員時,我得到一張地圖。這是可以理解
json.Unmarshal([]byte("{\"firstname\": \"bender\"}"), v.Elem().Interface())
只因爲它是真的傷害了我的眼睛:爲什麼你有一個叫'新'的變種?在更靈活的&Employee {}'上使用'new(Employee)'有什麼意義? –