一般情況請求一個接口時返回如下格式數據
{
"errno":0,
"errmsg":"success",
"data":"xxxxx" // data值不限類型
}
data 是我們想要的數據,但data中的數據格式是不確定的,通常在Go語言里定義interface類型。
type ApiRet struct {
ErrNo int `json:"errno"`
ErrMsg string `json:"errmsg"`
Data interface `json:"data"`
}
json.Unmarshal一級數據后得到apiRet,開始解析data數據。 data數據怎么解析呢?通常有如下幾種辦法(情形):
1、直接斷言解析成另一個類型數據:apiRet.data.(targetType)。 此種情況適合data里層級少,數據類型確定。
2、通常data的數據較為復雜,接口方也用struct定義的數據,此時apiRet.data 為map類型,值為interface。不能直接去斷言,我們也不可能一層一層解析。此時最好的方式是把apiRet.data json.Marshal 一下,再用具體的 struct 接收 json.Unmarshal反解結果。
2.1 接口方也可以把data 的值json序列化,但此種情況不方便抓包和直接閱讀,也不優雅。