在 Go 中,将 JSON 数据解组到预定义结构非常简单。但是,如果您想进一步自定义数据结构怎么办?假设您有以下 JSON 数据:
<code class="json">{ "Asks": [ [21, 1], [22, 1] ], "Bids": [ [20, 1], [19, 1] ] }</code>
您可以轻松定义一个结构来匹配此结构:
<code class="go">type Message struct { Asks [][]float64 `json:"Asks"` Bids [][]float64 `json:"Bids"` }</code>
但是,您可能更喜欢更专业的数据结构:
<code class="go">type Message struct { Asks []Order `json:"Asks"` Bids []Order `json:"Bids"` } type Order struct { Price float64 Volume float64 }</code>
要将 JSON 数据解组到此专用结构中,您可以在 Order 结构上实现 json.Unmarshaler 接口:
<code class="go">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 }</code>
此实现指定应从浮点数的两元素数组而不是结构(对象)的默认表示形式解码 Order 类型。
用法示例:
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) fmt.Println(m.Asks[0].Price) // Output: 21</code>
通过实现 json.Unmarshaler,您可以轻松自定义解组过程,以满足您特定的数据结构要求。
以上是如何在 Go 中将 JSON 解组自定义为特定结构?的详细内容。更多信息请关注PHP中文网其他相关文章!