2 回答
TA贡献1883条经验 获得超3个赞
我建议只是将它们分开。您永远不知道 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。
TA贡献1829条经验 获得超13个赞
您可以通过在另一个结构中嵌入 ResponseProperties 指针并在这些结构中实现 json.Unmarshaller 接口来覆盖解组行为。请注意结构内部指针的危险,因为指针将默认为 nil。
这是一个游乐场示例:http : //play.golang.org/p/ZTlLp0_wGY
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报