近期遇到以下类似以下接口返回值
{
"msg": "this is a test message",
"status": "unknown",
"data": {
"trace":"121212121212"
}
}
上面的 json 串中 status 字段类型不唯一,当为 200 时是成功的,字符串是有问题的,代码解析为
var ret map[string]interface{}
err := json.Unmarshal([]byte(str), &ret)
if err != nil {
fmt.Println(err.Error())
}
接下来需要依据 status 来判断接口是否成功,由于类型不一致,因此这里判断只要类型为 字符串 时就为错误
status := ret["status"]
if statusString, ok := status.(string); ok {
fmt.Println("string", statusString)
}
再深入下,如是向获取 data 里的 trace 字段的值,只需如下操作
data := ret["data"]
trace := data.(map[string]interface{})["trace"]
fmt.Println(trace)