解码不同 JSON 映射中的结构

我试图用相同的属性解码两个不同的响应,唯一的区别是它们来自的 JSON 映射的名称。


实现以下演示的正确方法是什么?


type ResponseProperties struct {

    CurrentPage uint

    TotalPages  uint

    Events      []TrackingEvent

}


type TrackingResponse struct {

    //  ResponseProperties

    CurrentPage uint            `json:"current_page"`

    TotalPages  uint            `json:"total_pages"`

    Events      []TrackingEvent `json:"clicks"`

}


type SubscriberResponse struct {

    //  ResponseProperties

    CurrentPage uint            `json:"current_page"`

    TotalPages  uint            `json:"total_pages"`

    Events      []TrackingEvent `json:"subscribers"`

}


慕尼黑的夜晚无繁华
浏览 150回答 2
2回答

白板的微信

我建议只是将它们分开。您永远不知道 API 响应何时突然发生变化。但是,如果您确实想将所有内容解组到一个结构中,一种方法是解组到一个具有所有可能别名字段的结构中,然后分配一个非空的字段。例如:type Basket struct {    NumFruit int    Fruits   []string // Can be either "Apples" or "Oranges" in JSON.}func (bskt *Basket) UnmarshalJSON(b []byte) error {    type Basket_ Basket    v := struct {        Basket_        Apples, Oranges []string    }{}    if err := json.Unmarshal(b, &v); err != nil {        return err    }    *bskt = Basket(v.Basket_)    if v.Apples != nil {        bskt.Fruits = v.Apples    }    if v.Oranges != nil {        bskt.Fruits = v.Oranges    }    return nil}游乐场:http : //play.golang.org/p/pLe5EwsYEP。

烙印99

您可以通过在另一个结构中嵌入 ResponseProperties 指针并在这些结构中实现 json.Unmarshaller 接口来覆盖解组行为。请注意结构内部指针的危险,因为指针将默认为 nil。这是一个游乐场示例:http : //play.golang.org/p/ZTlLp0_wGY
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go