猿问

JSON 嵌套动态结构 Go 解码

输入数据有一个例子。


{

    "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"`

}

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


紫衣仙女
浏览 112回答 1
1回答

料青山看我应如是

使用地图(类型)对JSON 中的对象map[string]SMSPhone建模:smstype 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 SMSSendJSONif 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是对象的“动态”属性,即电话号码。
随时随地看视频慕课网APP

相关分类

Go
我要回答