抓包
在进行json解析时,我们需要了解到服务器返回的格式, 这里以彩云翻译为例子(fanyi.caiyunapp.com/) 在我们输入需要翻译的英文后,按下F12打开开发者控制台(这里需要注意的点是,我们不要一进入页面就打开F12,多余的操作会使很多请求显示在控制台中,只需要在我们需要抓包的那一步之前打开控制台这样可以很好的找到我们需要的那个请求)
找到dict
这是我们可以查看到请求的方式,和一些请求头的格式,这是,我们复制url,使用(curlconverter.com/go/)工具即可为我们…,
我们可以在生成的代码中发现格式有
创建请求,设置请求头,发起请求,读取响应等几个步骤.
创建结构体,解析json
接下来,我们需要根据请求去创建结构体,结构体和json的结构需要一一对应这样即可发送请求,服务端去解析我们的请求.我们可以使用golang自带的函数marshal和unmarshal去构建或者解码json json字符串解析时,需要一个“接收体”接受解析后的数据,且Unmarshal时接收体必须传递指针,格式为 json.Unmarshal(我们需要解析的数据,对应的结构体名称)。否则解析虽不报错,但数据无法赋值到接受体中。
解析时,接收体可自行定义。json串中的key自动在接收体中寻找匹配的项进行赋值。匹配规则是:
先查找与key一样的json标签,找到则赋值给该标签对应的变量(如Name)。 没有json标签的,就从上往下依次查找变量名与key一样的变量,如Age。或者变量名忽略大小写后与key一样的变量。如HIgh,Class。第一个匹配的就赋值,后面就算有匹配的也忽略。 (前提是该变量必需是可导出的,即首字母大写)。 不可导出的变量无法被解析(如sex变量,虽然json串中有key为sex的k-v,解析后其值仍为nil,即空值)
当接收体中存在json串中匹配不了的项时,解析会自动忽略该项,该项仍保留原值。 在解析完成后,我们可以根据我们的需要进行一个业务逻辑的提取,需要哪些数据就拿到那些数据进行下面的判断
体会:
这一个实战案例可以让我们明白如何去向一个服务端发起请求,找到我们需要的json格式,设置好请求头,创建好对应的结构体.并且进行对应的解析,这样即可发送一个请求