我想在Golang中解组以下JSON数据:
b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)
Run Code Online (Sandbox Code Playgroud)
我知道如何做到这一点,我定义了这样的结构:
type Message struct {
Asks [][]float64 `json:"Bids"`
Bids [][]float64 `json:"Asks"`
}
Run Code Online (Sandbox Code Playgroud)
我不知道的是,是否有一种简单的方法可以将这一点专门化.我希望在解组之后以这样的格式获取数据:
type Message struct {
Asks []Order `json:"Bids"`
Bids []Order `json:"Asks"`
}
type Order struct {
Price float64
Volume float64
}
Run Code Online (Sandbox Code Playgroud)
所以我可以在解组之后再使用它:
m := new(Message)
err := json.Unmarshal(b, &m)
fmt.Println(m.Asks[0].Price)
Run Code Online (Sandbox Code Playgroud)
我真的不知道在GO中如何轻松或惯用,所以我希望有一个很好的解决方案.
Jam*_*dge 18
您可以通过在结构上实现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
}
Run Code Online (Sandbox Code Playgroud)
这基本上说Order应该从2元素的浮点数组中解码,而不是结构(对象)的默认表示.
你可以在这里玩这个例子:http://play.golang.org/p/B35Of8H1e6