我的目标是动态选择结构类型来解组 json。如果我使用指向 struct 的指针 - 它可以正常工作并按预期将 json 解析为 struct,但如果我使用 struct 然后获取指向它的指针并进行解组,它会将其解组为 map[string]interface{} 而不是 struct。我究竟做错了什么?https://play.golang.org/p/AkaCt_f69GVpackage mainimport ( "fmt" "encoding/json")type Person struct { Name string}var source = []byte(`{"Name":"Dan"}`)func main() { parse1() parse2()}func parse1() { var value interface{} value = new(Person) json.Unmarshal(source, value) // {Dan} fmt.Println(*(value.(*Person)))}func parse2() { var value interface{} value = Person{} json.Unmarshal(source, &value) // map[Name:Dan] fmt.Println(value)}
1 回答

婷婷同学_
TA贡献1844条经验 获得超8个赞
在parse2中,解码器忽略该Person值,因为该值不可寻址。解码器解码为该interface{}值,因为它是可寻址的。
通过将可寻址对象传递Person给函数来解决问题。
使用此代码:
func parse2() {
var value interface{}
value = &Person{} // add & on this line
json.Unmarshal(source, &value)
fmt.Println(value)
}
或此代码:
func parse2() {
var value interface{}
value = &Person{} // add & on this line
json.Unmarshal(source, value) // remove & on this line
fmt.Println(value)
}
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消