Here is the codeunmarshal trên giá trị phản ánh
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)
}
Trong chức năng Nhận
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)
}
Tôi không thể unmarshal các json vào loại đối tượng cơ bản.
Có gì sai ở đây? Tôi bị kẹt ở đây. Một cái gì đó rất đơn giản nhưng rất khó để tìm ra.
Cảm ơn
CẬP NHẬT :: Mục tiêu của vấn đề này là để truy xuất một đối tượng hình thành đầy đủ các loại thông qua chức năng Nhận.
Cách tiếp cận được đề cập bởi Nick trên nhận xét bên dưới không đưa cho tôi đối tượng thực tế mà tôi đã thử trước đây. Tôi có thể truy xuất dữ liệu (ngay cả khi đối tượng có các đối tượng đệ quy bên dưới) trong một bản đồ như thế này
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)
}
Tuy nhiên tôi cần đối tượng thực sự không chỉ là dữ liệu. Một cái gì đó như user := &User{"SomeName"}
nơi tôi cần user
đối tượng trở lại từ Unmarshall. Bí quyết là một nơi nào đó trong sự phản ánh nhưng không biết làm thế nào.
Phản ánh sẽ không làm những gì bạn nghĩ. Bạn không thể xây dựng một đối tượng tùy ý bằng cách sử dụng nó. Bạn có thể cobble một cái gì đó với nhau bằng cách sử dụng phản ánh và không an toàn nhưng thực sự bạn nên suy nghĩ lại những gì bạn đang cố gắng để làm. –
Cảm ơn tôi đang đóng chuỗi này. Cảm ơn bạn đã dành thời gian. Đã +1 câu trả lời của bạn. – Minty