首页 > 后端开发 > Golang > 正文

如何使用切片映射将 JSON 对象解组为结构?

Patricia Arquette
发布: 2024-10-31 16:39:29
原创
907 人浏览过

How to Unmarshal a JSON Object into a Struct with a Map of Slices?

将结构自定义解组为切片映射

问题

需要自定义解组才能将 JSON 解码为具有切片映射的结构。使用默认行为,映射保持为空。

解决方案

使用自定义 Unmarshaler:

  1. 实现 json.Unmarshaler 接口目标结构。
  2. 在 UnmarshalJSON 方法中:

    • 将 JSON 对象的键和值解组为原始、未解码的 JSON。
    • 从原始 JSON 值中提取 Last 字段(如果存在)。
    • 将原始值转换为切片映射并将其分配给 Pair 字段。

替代解决方案(不使用地图):

如果 JSON 结构是固定的,则可以在不使用地图的情况下调整目标结构以匹配 JSON 布局。

示例:

使用自定义 UnmarshalJSON 方法的自定义解组代码:

<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error {
    // Decode keys and values
    var obj map[string]json.RawMessage
    if err := json.Unmarshal(d, &obj); err != nil {
        return err
    }

    // Extract "last" field
    if last, ok := obj["last"]; ok {
        if err := json.Unmarshal(last, &r.Last); err != nil {
            return err
        }
        delete(obj, "last")
    }

    // Decode and assign Pair field
    r.Pair = make(map[string][]Candles, len(obj))
    for key, val := range obj {
        cc := []Candles{}
        if err := json.Unmarshal(val, &cc); err != nil {
            return err
        }
        r.Pair[key] = cc
    }
    return nil
}</code>
登录后复制

通过调整结构的替代解决方案:

<code class="go">type OHLC_RESS struct {
    Pair []Candles `json:"XXBTZUSD"`
    Last int64     `json:"last"`
}</code>
登录后复制

以上是如何使用切片映射将 JSON 对象解组为结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!