package main
import (
"fmt"
"encoding/json"
"reflect"
)
var (
datajson []byte
//ref mapp
)
type mapp map[string]reflect.Type
type User struct {
Name string
//Type map[string]reflect.Type
}
func MustJSONEncode(i interface{}) []byte {
result, err := json.Marshal(i)
if err != nil {
panic(err)
}
return result
}
func MustJSONDecode(b []byte, i interface{}) {
err := json.Unmarshal(b, i)
if err != nil {
panic(err)
}
}
func Store(a interface{}) {
datajson = MustJSONEncode(a)
//fmt.Println(datajson)
}
func Get(a []byte, b interface{}) {
objType := reflect.TypeOf(b).Elem()
obj := reflect.New(objType)
//fmt.Println(obj)
MustJSONDecode(a, &obj)
fmt.Printf("%s", obj)
}
func main() {
dummy := &User{}
david := User{Name: "DavidMahon"}
Store(david)
Get(datajson, dummy)
}
在Get函數
func Get(a []byte, b interface{}) {
objType := reflect.TypeOf(b).Elem()
obj := reflect.New(objType)
//fmt.Println(obj)
MustJSONDecode(a, &obj)
fmt.Printf("%s", obj)
}
我無法將JSON解組爲基礎對象類型。
這裏有什麼問題嗎?我很困在這裏。非常簡單但很難弄清楚的東西。
感謝
UPDATE ::這個問題的目標是中檢索進去功能傳遞類型的完全形成對象。
Nick在下面的評論中提到的方法並沒有讓我知道我以前已經嘗試過的實際對象。我反正檢索數據(即使對象具有遞歸對象下面)在地圖上像這樣
func Get(a []byte) {
var f interface{}
//buf := bytes.NewBuffer(a)
//v := buf.String()
//usr := &User{}
MustJSONDecode(a, &f)
fmt.Printf("\n %v \n", f)
}
不過,我需要實際的對象返回不僅僅是數據。類似於user := &User{"SomeName"}
,我需要從Unmarshall回來的對象user
。訣竅在某處反思,但不知道如何。
反映不會做你認爲會的事。你不能用它構造一個任意的對象。你可能可以用反射和不安全的方法拼湊一些東西,但是你真的應該重新思考你正在嘗試做什麼。 –
謝謝我關閉此主題。感謝您抽出時間。爲你的答案+1了。 – Minty