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