Go:Json转结构体

解决实际需求,案例分享。
  1. 请求Zabbix API,通过itemid获取到AppName(应用集名称)

    package main
    
    import (
     "encoding/json"
     "fmt"
     "io/ioutil"
     "log"
     "net/http"
     "strings"
    )
    
    func PostRequest(payload string, url string) {
     method := "POST"
     pl := strings.NewReader(payload)
     client := &http.Client{}
     req, err := http.NewRequest(method, url, pl)
    
     if err != nil {
         fmt.Println(err)
         return
     }
     req.Header.Add("Content-Type", "application/json")
    
     res, err := client.Do(req)
     if err != nil {
         fmt.Println(err)
         return
     }
     defer res.Body.Close()
    
     body, err := ioutil.ReadAll(res.Body)
    
     if err != nil {
         log.Println(err)
         return
     }
     fmt.Println(string(body))
    }
    
    func main() {
     const api = "http://192.168.11.11:28080/api_jsonrpc.php"
     const token = "a638200c24a8bea7f78cd5cabf3d1dd5"
     const itemid = "33918"
    
     a := fmt.Sprintf(`{
         "jsonrpc": "2.0",
         "method": "application.get",
         "params": {"itemids": "%s"},
         "auth": "%s","id": 2
         }`, itemid, token)
    
     PostRequest(a, api)
    }

    响应结果:

    {"jsonrpc":"2.0","result":[{"applicationid":"1574","hostid":"10354","name":"TEST","flags":"0","templateids":[]}],"id":2}
  2. 将响应结果(json)转结构体,方便取值

    在原来代码的基础上,继续编码。
    package main
    
    import (
     "encoding/json"
     "fmt"
     "io/ioutil"
     "log"
     "net/http"
     "strings"
    )
    
    type resultInfo struct {
     Applicationid string   `json:"applicationid"`
     Hostid        string   `json:"hostid"`
     Name          string   `json:"name"`
     Flags         string   `json:"flags"`
     Templateids   []string `json:"templateids"`
    }
    
    type resultArr []resultInfo
    
    type Response struct {
     Jsonrpc string    `json:"jsonrpc"`
     Result  resultArr `json:result`
     Id      int       `json:"id"`
    }
    
    type Byte []byte
    
    func JsonConvertStruct(body Byte) {
     var response Response
     json.Unmarshal([]byte(body), &response)
     fmt.Println(response.Result[0].Name)
    }
    
    func PostRequest(payload string, url string) {
     method := "POST"
     pl := strings.NewReader(payload)
     client := &http.Client{}
     req, err := http.NewRequest(method, url, pl)
    
     if err != nil {
         fmt.Println(err)
         return
     }
     req.Header.Add("Content-Type", "application/json")
    
     res, err := client.Do(req)
     if err != nil {
         fmt.Println(err)
         return
     }
     defer res.Body.Close()
    
     body, err := ioutil.ReadAll(res.Body)
    
     if err != nil {
         log.Println(err)
         return
     }
     JsonConvertStruct(body)
    }
    
    func main() {
     const api = "http://192.168.11.11:28080/api_jsonrpc.php"
     const token = "a638200c24a8bea7f78cd5cabf3d1dd5"
     const itemid = "33918"
    
     a := fmt.Sprintf(`{
         "jsonrpc": "2.0",
         "method": "application.get",
         "params": {"itemids": "%s"},
         "auth": "%s","id": 2
         }`, itemid, token)
    
     PostRequest(a, api)
    }

    结果:

    TEST
  3. 来自最好的总结

    人生苦短,建议你还是用python吧!

本文转载于(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/mB...

你可能感兴趣的:(go)