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

我的目标是动态选择结构类型来解组 json。如果我使用指向 struct 的指针 - 它可以正常工作并按预期将 json 解析为 struct,但如果我使用 struct 然后获取指向它的指针并进行解组,它会将其解组为 map[string]interface{} 而不是 struct。


我究竟做错了什么?


https://play.golang.org/p/AkaCt_f69GV


package main


import (

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

}


鸿蒙传说
浏览 107回答 1
1回答

婷婷同学_

在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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go