网站制作的软件,做网站页面对PS切图,做dw和ps的网站教学,优秀企业宣传册样本目录
解析接口返回数据
定义结构体
解析函数#xff1a;
测试
优化
资料获取方法 上一篇我们学习了怎么发送各种数据类型的http请求#xff0c;这一篇我们来介绍怎么来解析接口返回的XML的数据。 解析接口返回数据
定义结构体
假设我们现在有一个接口返回的数据resp如…目录
解析接口返回数据
定义结构体
解析函数
测试
优化
资料获取方法 上一篇我们学习了怎么发送各种数据类型的http请求这一篇我们来介绍怎么来解析接口返回的XML的数据。 解析接口返回数据
定义结构体
假设我们现在有一个接口返回的数据resp如下
?xml version1.0 encodingutf-8?
ResponseWithResponseInfocode00/codemessageSUCCESS/messagedescribe成功/describeresultInfouniqueNumber201808161133401673324075025000035/uniqueNumber/resultInfo
/ResponseWithResponseInfo要解析这个数据首先我们要定义一个与之树状结构一致的结构体
type XMLresp struct {ResponseWithResponseInfo xml.Name xml:ResponseWithResponseInfoCode int xml:codeMessage string xml:messageDescribe string xml:describeResultInfo struct {XMLName xml.Name xml:resultInfoUniqueNumber string xml:uniqueNumber}
}这里要注意xml.Name 这个tag它表示后面的数据的父元素是什么如果没有填写这个信息在数据解析的时候可能会获取不到数据。
解析函数
接下来我们就可以使用xml.Unmarshal方法将字符串中的数据解析出来了:
// XMLUnpack xml数据解析
func XMLUnpack(respbody string) (Prase []interface{}, errs error) {temp : []byte(respbody)v : XMLresp{}errs xml.Unmarshal(temp, v)Prase []interface{}{v.Code, v.Message, v.Describe, v.ResultInfo.UniqueNumber}if errs ! nil {return}return
}测试
func main() {data, _ : XMLUnpack(resp)fmt.Println(data)
}输出
bingoMac unpackData$ go run paraseXML.go
[0 SUCCESS 成功 201808161133401673324075025000035]优化
大家可能注意到了我们在定义XMLUnpack这个函数的时候用于解析这个数据的结构体是固定的也就是说这个函数只能解析同一个树桩结构的数据每一个不同的接口我们都需要写一个与之对应的函数。这样我们可能会在后续面临一个问题如果我们的接口多了取怎样的函数名可能都会是困扰我们的一个大问题而且会变得越来越不容易维护。
那么有没有办法能解决这个问题呢答案当然是有的下面我们一起来解决这个问题。 不知道大家还记不记得我么之前一起学习过的method语法它的优点是可以让不同作用的函数使用同一个函数名称属性可以完成面向对象语言特有的继承和重写操作如果忘记了可以看看我之前发布的学习笔记。
我们这次的优化其实就是method语法的一次实际应用下面让我们来看一下具体的实现。
// XMLUnpack 短信网关xml返回结果解析
func (smsresp *XMLresp) XMLUnpack(respbody string) (Prase []interface{}, errs error) {temp : []byte(respbody)v : SmsXMLresp{}errs xml.Unmarshal(temp, v)Prase []interface{}{v.Code, v.Message, v.Describe, v.ResultInfo.UniqueNumber}if errs ! nil {return}return
}现在的这个函数和之前的区别就在于我们指定了可以调用这个函数的数据类型为*XMLresp只有这个类型的数据能够调用这个方法同样的我们的调用方法也发生了一些小改变我们需要先定义一个存储这个结构体的变量然后再调用这个变量的方法当然这个变量在后续解析其他相同类型的数据时是可以无限次复用的。参考代码
func main() {var p XMLrespdata, _ : p.XMLUnpack(resp)fmt.Println(data)
}文中可能存在描述不正确欢迎大神们指正补充 资料获取方法
【留言777】 各位想获取源码等教程资料的朋友请点赞 评论 收藏三连
三连之后我会在评论区挨个私信发给你们~