go解析Webページjsonデータの取得
2161 ワード
ここではnginx検出ページデータを例に
1、参照jsonフォーマット定義構造体、実際のjsonデータフォーマットに基づいて定義
2、処理データ、ここではnginx検出ページのupstreamとname情報を取得して新しいデータを構成しjsに返す例
jsonResult関数の定義
1、参照jsonフォーマット定義構造体、実際のjsonデータフォーマットに基づいて定義
type Tmp struct {
Index int `json:"index"`
Upstream string `json:"upstream"`
Name string `json:"name"`
Status string `json:"status"`
Rise int `json:"rise"`
Fall int `json:"fall"`
Type string `json:"type"`
Port int `json:"port"`
}
type Temp struct {
Upstream string `json:"upstream"`
Name []string `json:"name"`
}
type Ses struct {
Total int `json:"total"`
Generation int `json:"generation"`
Server []*Tmp `json:"server"`
}
type Nginx struct {
Servers Ses `json:"servers"`
}
2、処理データ、ここではnginx検出ページのupstreamとname情報を取得して新しいデータを構成しjsに返す例
data := make([]*models.Temp, 0)
servers := &models.Ss{}
addresses := url_list //nginx
for _, address := range addresses {
server := make([]*models.Tmp, 0)
addr := address.TgtAddress
// web
resp, _ := http.Get(addr)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
continue
}else {
json.Unmarshal(body, servers)
server = servers.Servers.Server
for _, temp := range server {
t := &models.Temp{}
ups := temp.Upstream
ad := temp.Name
re := tool.IsExit(data, ups)
if re == false {
t.Upstream = ups
t.Name = append(t.Name, ad)
data = append(data, t)
}else {
for k, v := range data {
if v.Upstream == ups {
r := tool.Exit(v.Name, ad)
if r == false {
v.Name = append(v.Name, ad)
data[k] = v
}
}
}
}
}
}
}
// js
m.jsonResult(conf.JRCodeSucc, "", data)
jsonResult関数の定義
type JsonResult struct {
Code conf.JsonResultCode `json:"code"`
Msg string `json:"msg"`
Obj interface{} `json:"obj"`
}
func (c *BaseController) jsonResult(code conf.JsonResultCode, msg string, obj interface{}) {
result := &models.JsonResult{code, msg, obj}
c.Data["json"] = result
c.ServeJSON()
c.StopRun()
}