猿问

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

我在反序列化我的对象时遇到问题。我使用该对象的接口来调用序列化,并且通过读取输出,序列化工作完美。这是我的对象的底层结构:


type pimp struct {

    Price       int

    ExpDate     int64

    BidItem     Item

    CurrentBid  int

    PrevBidders []string

}

这是它实现的接口:


type Pimp interface {

    GetStartingPrice() int

    GetTimeLeft() int64

    GetItem() Item

    GetCurrentBid() int

    SetCurrentBid(int)

    GetPrevBidders() []string

    AddBidder(string) error

    Serialize() ([]byte, error)

}

Serialize() 方法:


func (p *pimp) Serialize() ([]byte, error) {

    return json.Marshal(*p)

}

您可能已经注意到,pimp 有一个名为 Item 的变量。这个项目也是一个接口:


type item struct {

    Name string

}


type Item interface {

    GetName() string

}

现在序列化此类对象的样本会返回以下 JSON:


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

这是我的反序列化代码:


func PimpFromJSON(content []byte) (Pimp, error) {

    p := new(pimp)

    err := json.Unmarshal(content, p)

    return p, err

}

但是,运行它会给我以下错误:


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

任何帮助表示赞赏。


慕无忌1623718
浏览 136回答 1
1回答

Cats萌萌

unmarshaler 不知道用于 nilBidItem字段的具体类型。您可以通过将字段设置为适当类型的值来解决此问题:func PimpFromJSON(content []byte) (Pimp, error) {    p := new(pimp)    p.BidItem = &item{}    err := json.Unmarshal(content, p)    return p, err}
随时随地看视频慕课网APP

相关分类

Go
我要回答