小编典典

在特定结构中解组Json数据

go

我想在Go中解组以下JSON数据:

b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)

我知道该怎么做,我这样定义一个结构:

type Message struct {
    Asks [][]float64 `json:"Bids"`
    Bids [][]float64 `json:"Asks"`
}

我不知道的是,是否有一种简单的方法可以对此进行专门化处理。我想在拆封后以如下格式获取数据:

type Message struct {
    Asks []Order `json:"Bids"`
    Bids []Order `json:"Asks"`
}

type Order struct {
    Price float64
    Volume float64
}

这样我可以在像这样解组后稍后使用它:

m := new(Message)
err := json.Unmarshal(b, &m)
fmt.Println(m.Asks[0].Price)

我真的不知道如何在GO中轻松或习惯地执行此操作,因此我希望有一个不错的解决方案。


阅读 218

收藏
2020-07-02

共1个答案

小编典典

您可以通过在结构上实现json.Unmarshaler接口来实现Order。这样的事情应该做:

func (o *Order) UnmarshalJSON(data []byte) error {
    var v [2]float64
    if err := json.Unmarshal(data, &v); err != nil {
        return err
    }
    o.Price = v[0]
    o.Volume = v[1]
    return nil
}

这基本上表示Order应该从2个元素的float数组中解码类型,而不是从结构(对象)的默认表示中解码。

您可以在此处尝试使用此示例:http
//play.golang.org/p/B35Of8H1e6
2020-07-02