为了账号安全,请及时绑定邮箱和手机立即绑定

JSON 嵌套动态结构 Go 解码

JSON 嵌套动态结构 Go 解码

Go
紫衣仙女 2023-06-19 16:03:17
输入数据有一个例子。{    "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"`}这是我在向服务器发出适当请求后收到的数据示例。我得到了这样的数据。这样的数据如何序列化?由于嵌套结构列表的动态名称,我的尝试失败了。如何正确处理这种嵌套的动态结构?
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

使用地图(类型)对JSON 中的对象map[string]SMSPhone建模: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)

}

fmt.Printf("%+v", result)

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

{Status:OK StatusCode:100 Sms:map[79035671233:{Status:ERROR StatusCode:203 StatusText:No message text} 79105432212:{Status:ERROR StatusCode:203 StatusText:No message text} 79607891234:{Status:ERROR StatusCode:203 StatusText:没有消息文本}]余额:2676.18}

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


查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信