首页 > 后端开发 > Golang > 如何在 Go 中将 JSON 解组自定义为特定结构?

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

Linda Hamilton
发布: 2024-11-07 05:58:03
原创
871 人浏览过

How to Customize JSON Unmarshaling into a Specific Struct in Go?

将 JSON 数据自定义解组到特定结构

在 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.Unmarshaler 进行自定义解组

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板