json.Unmarshal没有正确解码到内部接口{}

时间:2017-02-25 17:49:16

标签: json go unmarshalling telegram telegram-bot

我正在为Golang开发一个Telegram Bot API包装器(我知道已经有一些,但我这样做是为了学习)。我有一个Response结构:

type Response struct {
  Ok bool `json:"ok"`
  ErrorCode int64 `json:"error_code"`
  Description string `json:"description"`
  Result interface{} `json:"result"`
}

我无法知道Result的实际类型:电报服务器可以返回很多内容;我为每个人制作了一个结构,但我不知道哪一个会在Result。 当{{1}将HTTP响应中的JSON添加到Unmarshal结构中时,除了Response之外,所有内容都已正确加载。

在我确定结果为Result(例如)的函数中,我正在执行User,但是我在运行时遇到以下错误 user := resp.Result.(*User)。因此,panic: interface conversion: interface {} is map[string]interface {}, not *tgbot.UserResult。如何将其转换为map[string]interface{}

感谢您的回答。

1 个答案:

答案 0 :(得分:6)

将它设为json.RawMessage并在第二步解组它,当你确定它是什么类型时。

查看https://golang.org/pkg/encoding/json/#RawMessage上的示例。