首页 >后端开发 >Golang >如何在 Go 中使用嵌套结构中的动态名称反序列化 JSON?

如何在 Go 中使用嵌套结构中的动态名称反序列化 JSON?

Susan Sarandon
Susan Sarandon原创
2024-11-22 21:24:15969浏览

How to Deserialize JSON with Dynamic Names in Nested Structures in Go?

使用 Go 解码 JSON 中的嵌套动态结构

本文解决了反序列化在嵌套结构中具有动态名称的 JSON 数据的挑战。让我们检查问题并提供解决方案。

问题陈述

考虑以下 JSON 响应:

{
    "status": "OK",
    "status_code": 100,
    "sms": {
        "79607891234": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79035671233": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79105432212": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        }
    },
    "balance": 2676.18
}

结构:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string     `json:"status"`
    StatusCode int        `json:"status_code"`
    Sms        []SMSPhone `json:"sms"`
    Balance    float64    `json:"balance"`
}

出现此问题的原因是动态电话号码作为“短信”中的属性名称

解决方案

为了处理这种情况,我们可以使用映射来表示 JSON 中的“sms”对象:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string              `json:"status"`
    StatusCode int                 `json:"status_code"`
    Sms        map[string]SMSPhone `json:"sms"`
    Balance    float64             `json:"balance"`
}

现在,反序列化代码如下所示:

var result SMSSendJSON

if err := json.Unmarshal([]byte(src), &result); err != nil {
    panic(err)
}

这种方法允许我们正确处理嵌套Go 中的动态结构。

以上是如何在 Go 中使用嵌套结构中的动态名称反序列化 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!

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