有一个关于输入数据的示例。
\n\n{\n "status": "OK",\n "status_code": 100,\n "sms": {\n "79607891234": {\n "status": "ERROR",\n "status_code": 203,\n "status_text": "\xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f"\n },\n "79035671233": {\n "status": "ERROR",\n "status_code": 203,\n "status_text": "\xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f"\n },\n "79105432212": {\n "status": "ERROR",\n "status_code": 203,\n "status_text": "\xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f"\n }\n },\n "balance": 2676.18\n}\nRun Code Online (Sandbox Code Playgroud)\n\n{\n "status": "OK",\n "status_code": 100,\n "sms": {\n "79607891234": {\n "status": "ERROR",\n "status_code": 203,\n "status_text": "\xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f"\n },\n "79035671233": {\n "status": "ERROR",\n "status_code": 203,\n "status_text": "\xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f"\n },\n "79105432212": {\n "status": "ERROR",\n "status_code": 203,\n "status_text": "\xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f"\n }\n },\n "balance": 2676.18\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是我向服务器发出适当请求后收到的数据的示例。我得到了这样的数据。这样的数据如何序列化呢?由于嵌套结构列表的动态名称,我的尝试失败了。\n如何正确处理此类嵌套动态结构?
\n使用映射(类型为map[string]SMSPhone)对smsJSON 中的对象进行建模:
type SMSPhone struct {\n Status string `json:"status"`\n StatusCode int `json:"status_code"`\n StatusText string `json:"status_text"`\n}\n\ntype SMSSendJSON struct {\n Status string `json:"status"`\n StatusCode int `json:"status_code"`\n Sms map[string]SMSPhone `json:"sms"`\n Balance float64 `json:"balance"`\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后解组:
\n\nvar result SMSSendJSON\n\nif err := json.Unmarshal([]byte(src), &result); err != nil {\n panic(err)\n}\nfmt.Printf("%+v", result)\nRun Code Online (Sandbox Code Playgroud)\n\n将导致(在Go Playground上尝试):
\n\n\n\n\n{状态:正常状态代码:100短信:地图[79035671233:{状态:错误状态代码:203 StatusText:\ xd0 \ x9d \ xd0 \ xb5 \ xd1 \ x82 \ xd1 \ x82 \ xd0 \ xb5 \ xd0 \ xba \ xd1 \ x81 \xd1\x82\xd0\xb0\xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f} 79105432212:{状态:错误状态代码:203 状态文本:\xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe \xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f} 79607891234:{状态:错误 StatusCode:203 StatusText:\xd0\x9d\xd0\xb5\xd1 \x82 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5 \xd0\xbd\xd0\xb8\xd1\x8f}] 余额:2676.18}
\n
映射中的键result.Sms是对象的“动态”属性,即电话号码。
查看相关问题:
\n\n\n\n如何将未知字段名的 JSON 解组为 golang 中的结构?
\n\n\n\n将 json 字符串解组到一个结构体,该结构体具有该结构体本身的一个元素
\n| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |