json - 从 JSON 反序列化时接口(interface)断言失败

标签 json go struct interface assertion

在使用 JSON 序列化/反序列化结构时,我可能做错了什么。 JSON反序列化后断言接口(interface)时:

AData2 = anInterface.(Data)
在运行时,go 需要一个 map[string] 接口(interface),但对象是 Data 类型:
type Data struct {
    Content string
    Links   []string
}
它抛出错误:

panic: interface conversion: interface {} is map[string]interface {}, not main.Data


完整代码在 https://play.golang.org/p/jm3_ut3R56n
提前感谢您的任何提示。

最佳答案

你不能只是断言任何 interface进入随机struct类型或类似的东西。
如果那个 interface原来是struct输入数据,只有这样你才能断言 interface到那个struct类型数据。


type Data struct {
    Content string
    Links   []string
}

func main() {
    var AData, AData2 Data
    var anInterface interface{}

    // populate data
    AData.Content = "hello world"
    AData.Links = []string{"link1", "link2", "link3"}
    anInterface = AData
    AData2 = anInterface.(Data)
}
你看 anInterface已经是 Data类型值,这就是为什么我们可以将其断言为 Data再次输入。
另一件事,如果你真的想反序列化你的 json数据输入 Data类型结构,你应该直接unmarshal进入那个变量。
var AData2 Data

err = json.Unmarshal([]byte(value), &AData2)
if err != nil {
    panic(err)
}

关于json - 从 JSON 反序列化时接口(interface)断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63721522/

相关文章:

javascript - 无法在 Angular 2 项目中检索 JSON 文件

json - 使用 NSURLSession 时如何访问数据?

amazon-web-services - 结合使用AWS Go SDK和配置文件

c++ - 类内的 stable_sort

c - 什么时候应该 typedef struct 与 pointer to struct?

C: 是否使用转换为 "outer"结构类型的指针访问嵌套结构的初始成员?

javascript - 什么是 JSONP,为什么要创建它?

python - 将 Json 加载到 Pandas 数据框中

go - 如何获取 Dispart 详细信息(磁盘名(例如 : Disk 0) free & usage of disk) using Golang package

json - 结构中的 json 标记真的需要编码吗?