首页  >  文章  >  后端开发  >  如何在 Go 中将 JSON 数据解组为自定义数据结构?

如何在 Go 中将 JSON 数据解组为自定义数据结构?

Susan Sarandon
Susan Sarandon原创
2024-11-06 14:35:02708浏览

How to Unmarshal JSON Data into a Custom Data Structure in Go?

将 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn