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

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

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

Go
慕无忌1623718 2022-03-07 16:02:25
我在反序列化我的对象时遇到问题。我使用该对象的接口来调用序列化,并且通过读取输出,序列化工作完美。这是我的对象的底层结构: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

}


查看完整回答
反对 回复 2022-03-07
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

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