对反射值进行解组

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)


}

在获取函数中


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 解组为基础对象类型。


这里有什么问题?我被困在这里了。一件很简单却又很难搞清楚的事情。


谢谢


更新::此问题的目标是检索在 Get 函数中传递的类型完整的对象。


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"}我需要user从 Unmarshall 返回对象的地方。诀窍是在反射中的某个地方,但不知道如何。


qq_花开花谢_0
浏览 170回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go