Go encoding JSON from relfect.Value

huangapple go评论107阅读模式
英文:

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).

huangapple
  • 本文由 发表于 2014年8月17日 21:37:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/25349694.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定