从 relfect.Value 编码 JSON

cas*_*iel 1 reflection encoding json go

在encoding/json下面,它使用relfect来编码结构。

但是我如何编码已经是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)
}
Run Code Online (Sandbox Code Playgroud)

它输出了这样的内容:

[123 34 102 108 97 103 34 58 52 48 54 125]
Run Code Online (Sandbox Code Playgroud)

这些是什么?什么是正确的方法来做到这一点,我的意思是从 Reflect.Value 类型获取正确的 json 字符串?

thw*_*hwd 6

用于获取可以 JSON 编码的(reflect.Value).Interface()类型的值:interface{}

j, err := json.Marshal(s.Interface())
Run Code Online (Sandbox Code Playgroud)

至于你的问题:

[123 34 102 108 97 103 34 58 52 48 54 125]
Run Code Online (Sandbox Code Playgroud)

是 string {"flag":406},打印为字节切片(这就是json.Marshal返回的内容)。