在输入数据上有一个例子。
{
"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"`
}
这是在向服务器发出适当请求后我收到的数据的示例。我得到了这样的数据。此类数据如何序列化?由于嵌套结构列表的动态名称,我的尝试失败了。 这样的嵌套动态结构如何正确处理?
答案 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