我在反序列化我的对象时遇到问题。我使用该对象的接口来调用序列化,并且通过读取输出,序列化工作完美。这是我的对象的底层结构: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任何帮助表示赞赏。
1 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
unmarshaler 不知道用于 nilBidItem字段的具体类型。您可以通过将字段设置为适当类型的值来解决此问题:
func PimpFromJSON(content []byte) (Pimp, error) {
p := new(pimp)
p.BidItem = &item{}
err := json.Unmarshal(content, p)
return p, err
}
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消