golang 快速解析api 返回的data数据


一般情况请求一个接口时返回如下格式数据

{
"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序列化,但此种情况不方便抓包和直接阅读,也不优雅。

Go