从JSON反序列化时接口断言失败
在序列化/反序列化带有JSON的结构时,我可能做错了什么。在JSON反序列化后断言接口时:从JSON反序列化时接口断言失败,json,go,struct,interface,assertion,Json,Go,Struct,Interface,Assertion,在序列化/反序列化带有JSON的结构时,我可能做错了什么。在JSON反序列化后断言接口时: AData2 = anInterface.(Data) 在运行时,go需要map[string]接口,但对象的类型为Data: type Data struct { Content string Links []string } 它抛出错误: panic:interface conversion:interface{}是map[string]interface{}, 不是主数据 完
AData2 = anInterface.(Data)
在运行时,go需要map[string]接口,但对象的类型为Data:
type Data struct {
Content string
Links []string
}
它抛出错误:
panic:interface conversion:interface{}是map[string]interface{},
不是主数据
完整代码在
提前感谢您的提示。您不能将任何
接口
断言为随机结构
类型或类似类型
如果该接口
实际上是该结构
类型数据,那么您只能将该接口
断言为该结构
类型数据
类型数据结构{
内容字符串
链接[]字符串
}
func main(){
变量AData,AData2数据
var一个接口{}
//填充数据
AData.Content=“你好,世界”
AData.Links=[]字符串{“link1”、“link2”、“link3”}
接口=数据
AData2=接口(数据)
}
您可以看到接口
已经是数据
类型值,这就是为什么我们可以再次将其断言为数据
类型
另一件事,如果您真的想将json
数据反序列化为data
类型结构,您应该直接unmarshal
到该变量中
var AData2数据
err=json.Unmarshal([]字节(值),&AData2)
如果出错!=零{
恐慌(错误)
}
您应该直接对结构进行解组,如下所示err=json.unmarshal(value,&AData2)
创建一个。您是否先将JSON[]字节
转换为接口,然后再将其转换为结构?在这种情况下,您可以通过将json属性添加到类型定义中,直接将其解组到结构。如果您需要在转换为数据之前将[string]接口{}转换为map,您可以查看。不要与混淆。此代码中没有类型转换。