英文:
Go encoding JSON from relfect.Value
问题
在encoding/json包中,它使用reflect来对结构体进行编码。
但是,如果我要对一个已经是reflect.Value类型的对象进行编码,该怎么办呢?
请查看下面的代码:
type Person struct {
Name string `json:"name"`
Pwd string `json:"pwd"`
}
func main() {
factory := map[string]reflect.Type{
"Person":reflect.TypeOf(Person{}),
}
s := reflect.New(factory["Person"]).Elem()
s.Field(0).SetString("Max")
s.Field(1).SetString("Password")
j, err := json.Marshal(s)
if err != nil {
fmt.Println("error")
}
fmt.Println(j)
}
它输出的结果类似于:
[123 34 102 108 97 103 34 58 52 48 54 125]
这是什么?
如何正确地从reflect.Value类型获取正确的JSON字符串呢?
英文:
Underneath encoding/json it uses relfect to encoding struct.
But How can I encoding something that is already a type of reflect.Value
Check out the code below:
type Person struct {
Name string `json:"name"`
Pwd string `json:"pwd"`
}
func main() {
factory := map[string]reflect.Type{
"Person":reflect.TypeOf(Person{}),
}
s := reflect.New(factory["Person"]).Elem()
s.Field(0).SetString("Max")
s.Field(1).SetString("Password")
j, err := json.Marshal(s)
if err != nil {
fmt.Println("error")
}
fmt.Println(j)
}
It out puts something like this:
[123 34 102 108 97 103 34 58 52 48 54 125]
What is these?
What is correct way to do this, I mean to get right json string from a reflect.Value type?
答案1
得分: 5
使用(reflect.Value).Interface()
来获取一个可以进行JSON编码的interface{}
类型的值:
j, err := json.Marshal(s.Interface())
至于你的问题:
[123 34 102 108 97 103 34 58 52 48 54 125]
是字符串{"flag":406}
,以字节切片的形式打印出来(这是json.Marshal
返回的结果)。
英文:
Use (reflect.Value).Interface()
to get a value of type interface{}
which can be JSON-encoded:
j, err := json.Marshal(s.Interface())
As for your question:
[123 34 102 108 97 103 34 58 52 48 54 125]
is the string {"flag":406}
, printed as a slice of bytes (which is what json.Marshal
returns).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论