我想在 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 中轻松或惯用地做到这一点 所以我希望有一个很好的解决方案。
最佳答案
您可以通过实现 json.Unmarshaler
interface 来做到这一点在您的 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
类型应该从 float 的 2 元素数组而不是结构(对象)的默认表示中解码。
您可以在此处试用此示例:http://play.golang.org/p/B35Of8H1e6
关于json - 在特定结构中解码 Json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511417/