JSON嵌套动态结构进行解码

时间:2019-05-23 12:08:08

标签: 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"`
}

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

1 个答案:

答案 0 :(得分:3)

使用地图(类型为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)

会导致(请在Go Playground上尝试):

  

{状态:正常状态代码:100 Sms:映射[79035671233:{状态:错误状态代码:203状态文本: StatusCode:203 StatusText:Неттекстасообщения}]余额:2676.18}

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

查看相关问题:

How to parse/deserlize a dynamic JSON in Golang

How to unmarshal JSON with unknown fieldnames to struct in golang?

Unmarshal JSON with unknown fields

Unmarshal json string to a struct that have one element of the struct itself