gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:32:07 25 4
gpt4 key购买 nike

在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com