从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{}, 不是主数据 完

在序列化/反序列化带有JSON的结构时,我可能做错了什么。在JSON反序列化后断言接口时:

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,您可以查看。不要与混淆。此代码中没有类型转换。