json - 解码不同 JSON 映射中的结构

标签 json go

我正在尝试解码两个具有相同属性的不同响应,唯一的区别是它们来自 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"`
}

最佳答案

我建议将它们分开。您永远不知道 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
}

Playground :http://play.golang.org/p/pLe5EwsYEP .

关于json - 解码不同 JSON 映射中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35015666/

相关文章:

python - Django 和 postgres - 在模型字段中将数据存储为 json 的缺点

jquery - 在 Go 模板中包含 js 文件

java - jackson ,如何使用自定义名称反序列化字段?

go - 在 Go 中使用 channel 对性能有好处吗?

在多个结构字段上排序

database - 在 golang 的 GORM 中引用另一个元素

go - Iris - 如何记录错误/异常?

C# 解析无名称的Json文件

javascript - JSON.stringify 抛出 RangeError : Invalid string length for huge objects

java - 在 Spring MVC 中将 JSON 对象绑定(bind)到 JavaBean 类,我有一些不清楚的事情