将 JSON 数据解组为自定义数据结构
在 Go 中,通常需要将 JSON 数据解组为特定的数据结构。这可以通过定义自定义类型并实现 json.Unmarshaler 接口来实现。
问题陈述
假设我们有包含两个订单信息数组的 JSON 数据:Asks 和出价。我们希望将此数据解组到具有两个字段的结构中:Asks 和 Bids,其中每个字段都是 Order 结构体的一部分。
自定义类型和解组器实现
为了创建我们想要的数据结构,我们定义一个名为 Order 的自定义类型:
<code class="go">type Order struct { Price float64 Volume float64 }</code>
接下来,我们为 Order 类型实现 json.Unmarshaler 接口。这允许我们指定如何将 JSON 数据解析为自定义结构:
<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>
此实现期望订单的 JSON 数据是两个浮点数的数组,分别表示价格和数量。
解组 JSON 数据
使用我们的自定义类型和 UnmarshalJSON 实现,我们现在可以按如下方式解组 JSON 数据:
<code class="go">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`) m := new(Message) if err := json.Unmarshal(b, &m); err != nil { // handle error } fmt.Println(m.Asks[0].Price) // 21</code>
通过实现 json.Unmarshaler 接口,我们实现了将 JSON 数据解组为自定义数据结构的目标,该数据结构可以更准确地表示订单信息。
以上是如何在 Go 中将 JSON 数据解组为自定义数据结构?的详细内容。更多信息请关注PHP中文网其他相关文章!