从reflect.Value转换编码JSON

时间:2014-08-17 13:37:54

标签: json reflection encoding go

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

但是我如何编码已经是一种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字符串?

1 个答案:

答案 0 :(得分:2)

使用(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返回的内容)。