登录
首页 >  Golang >  Go问答

JSON 嵌套动态结构 Go 解码

来源:Golang技术栈

时间:2023-04-10 12:42:49 434浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《JSON 嵌套动态结构 Go 解码》,就很适合你!文章讲解的知识点主要包括golang,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

有一个关于输入数据的例子。

{
    "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"`
    SmsID      string `json:"sms_id"`
    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"`
}

这是我在向服务器发出适当请求后收到的数据示例。我得到这样的数据。这样的数据如何序列化?由于嵌套结构列表的动态名称,我的尝试失败了。如何正确处理这种嵌套的动态结构?

正确答案

使用映射(类型map[string]SMSPhonesms在 JSON 中为对象建模:

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)
}
fmt.Printf("%+v", result)

将导致(在Go Playground上尝试):

{状态:100S 状态码:地图[79035671233:{状态:错误状态码:203 状态文字:袧械褌褌械泻褋褌褌芯斜褖机械薪疏褟} 79105432212:{状态:错误状态码:203状态文字:袧械褌褌邪褌芯芯斜褖械泻褟} 79607891234:{状态:错误状态码:203 状态文字:袧褌褌械泻褋褌邪褋芯芯偏褖械泻褟}] 余额:2676.18}

地图中的键result.Sms是对象的“动态”属性,即电话号码。

查看相关问题:

[如何在 Golang 中解析/反序列化动态 JSON](https://stackoverflow.com/questions/29347092/how- to-parse-deserlize-a-dynamic-json-in-golang/29347148#29347148)

[如何解组具有未知字段名的 JSON 以在 golang 中构建?](https://stackoverflow.com/questions/49362653/how-to-unmarshal-json-with- unknown-fieldnames-to-struct-in-golang/49362754#49362754)

[使用未知字段解组 JSON](https://stackoverflow.com/questions/33436730/unmarshal-json- with-unknown-fields/33437853#33437853)

[将 json 字符串解组为具有结构本身的一个元素的结构](https://stackoverflow.com/questions/46585279/unmarshal- json-string-to-a-struct-that-have-one-element-of-the-struct- itself/46585770#46585770)

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《JSON 嵌套动态结构 Go 解码》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>