dongxin991209 2016-08-30 15:36
浏览 44
已采纳

json:无法将对象解组为Auction.Item类型的Go值

I have a problem deserializing my object. I use an interface to this object to call the Serialization, and from reading the output the serialization works perfectly. Here is the underlying struct of my object:

type pimp struct {
    Price       int
    ExpDate     int64
    BidItem     Item
    CurrentBid  int
    PrevBidders []string
}

And here's the interface it implements:

type Pimp interface {
    GetStartingPrice() int
    GetTimeLeft() int64
    GetItem() Item
    GetCurrentBid() int
    SetCurrentBid(int)
    GetPrevBidders() []string
    AddBidder(string) error
    Serialize() ([]byte, error)
}

The Serialize() method:

func (p *pimp) Serialize() ([]byte, error) {
    return json.Marshal(*p)
}

As you may have noticed, pimp has a variable by the name of Item. This item is also, an interface:

type item struct {
    Name string
}

type Item interface {
    GetName() string
}

Now serializing a sample of such an object returns the following JSON:

{"Price":100,"ExpDate":1472571329,"BidItem":{"Name":"ExampleItem"},"CurrentBid":100,"PrevBidders":[]}

Here is my deserialization code:

func PimpFromJSON(content []byte) (Pimp, error) {
    p := new(pimp)
    err := json.Unmarshal(content, p)
    return p, err
}

Running it, however, gives me the following error:

json: cannot unmarshal object into Go value of type Auction.Item

Any help is appreciated.

  • 写回答

1条回答 默认 最新

  • douxuexiao1748 2016-08-30 15:46
    关注

    The unmarshaler does not know the concrete type to use for the nil BidItem field. You can fix this by setting the field to a value of the appropriate type:

    func PimpFromJSON(content []byte) (Pimp, error) {
        p := new(pimp)
        p.BidItem = &item{}
        err := json.Unmarshal(content, p)
        return p, err
    }
    

    playground example

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?