为了账号安全,请及时绑定邮箱和手机立即绑定

如何动态选择结构类型以解组 json

如何动态选择结构类型以解组 json

Go
鸿蒙传说 2022-05-18 16:13:49
我的目标是动态选择结构类型来解组 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)

}


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号