为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的 JSON 解码会改变对象类型吗?

Go 中的 JSON 解码会改变对象类型吗?

Go
哔哔one 2021-11-01 16:01:46
我正在尝试构建一个可以从 JSON 文件中读取多种不同类型对象的库(实际库将它们从 couchdb 中提取出来,但为此目的,它是从 json 加载它们)。我的库对加载的具体对象类型一无所知,因此下面的“CreateObject()”调用(由实际代码中的接口满足)。我遇到了一个问题,当我尝试将 CreateObject() 调用创建的对象转换回我的具体类型(示例中的 MyType)时,我感到恐慌:panic: interface conversion: interface is map[string]interface {}, not main.MyType我想知道我在这里哪里出错了,或者是否有另一种更类似的方式来解决这个问题。如果我在 Java 中做这件事,我会使用泛型并且希望它很简单。请注意,如果我注释掉 json.NewDecoder... 行,则代码有效(按预期打印出一个空行)。这意味着在解码操作中发生了一些事情。可运行示例如下:package mainimport (    "encoding/json"    "fmt"    "strings")type MyType struct {    Name string `json:"name"`    Age  int32  `json:"age"`}func CreateObject() interface{} {    return MyType{}}func LoadJsonData() interface{} {    obj := CreateObject()    jsonStr := `{"name":"Person", "age":30}`    json.NewDecoder(strings.NewReader(jsonStr)).Decode(&obj)    return obj}func main() {    obj := LoadJsonData()    // This works for some reason    // y := obj.(map[string]interface{})    // fmt.Println(y["name"])    // This causes a panic    x := obj.(MyType)    fmt.Println(x.Name)}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信