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

如何将 JSON 解组为 Go 中的接口

如何将 JSON 解组为 Go 中的接口

Go
呼如林 2021-06-18 18:01:44
我正在尝试同时将多个不同的 JSON 响应中的字段解组和剥离到适当的 Go 结构中。为此,我创建了一个 Wrappable 接口,该接口定义了 Unwrap 方法(它去除了适当的字段)并将该接口传递给解组和解包的代码。它看起来像下面的例子(也在http://play.golang.org/p/fUGveHwiz9):package mainimport (    "encoding/json"    "fmt")type Data struct {    A string `json:"a"`    B string `json:"b"`}type DataWrapper struct {    Elements []Data `json:"elems"`}type Wrapper interface {    Unwrap() []interface{}}func (dw DataWrapper) Unwrap() []interface{} {    result := make([]interface{}, len(dw.Elements))    for i := range dw.Elements {        result[i] = dw.Elements[i]    }    return result}func unmarshalAndUnwrap(data []byte, wrapper Wrapper) []interface{} {    err := json.Unmarshal(data, &wrapper)    if err != nil {        panic(err)    }    return wrapper.Unwrap()}func main() {    data := `{"elems": [{"a": "data", "b": "data"}, {"a": "data", "b": "data"}]}`    res := unmarshalAndUnwrap([]byte(data), DataWrapper{})    fmt.Println(res)}但是,当我运行代码时,Go 会出现以下错误:panic: json: cannot unmarshal object into Go value of type main.Wrapper似乎解组器不想传递指向接口的指针。鉴于我可以使用 unmarshalAndUnwrap 方法中的反射包获取底层类型和字段,我对此感到有些惊讶。任何人都可以深入了解这个问题以及我如何解决它?
查看完整描述

1 回答

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

添加回答

举报

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