JSON嵌套动态结构Go解码

JSON嵌套动态结构Go解码,json,go,Json,Go,有一个关于输入数据的示例 { "status": "OK", "status_code": 100, "sms": { "79607891234": { "status": "ERROR", "status_code": 203, "status_text": "Нет текста сообщения" }, "79035671233": {

有一个关于输入数据的示例

{
    "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
}
类型SMSPhone结构{
状态字符串`json:“状态”`
StatusCode int`json:“状态代码”`
SmsID字符串`json:“sms_id”`
StatusText字符串`json:“状态\文本”`
}
类型SMSSendJSON struct{
状态字符串`json:“状态”`
StatusCode int`json:“状态代码”`
Sms[]SMSPhone`json:“Sms”`
Balance float64`json:“Balance”`
}
这是我在向服务器发出适当请求后收到的数据示例。我得到了这样的数据。如何序列化这些数据?由于嵌套结构列表的动态名称,我的尝试失败。 如何正确处理这种嵌套的动态结构?

使用映射(类型为
map[string]SMSPhone
)在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)
}
fmt.Printf("%+v", result)
将导致(在上尝试):

{状态:正常状态代码:100 Sms:map[79035671233:{状态:错误状态代码:203状态文本:Сааааааааааааааааааааааааааааааааа107

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

见相关问题:


tnx很有气势,伙计。