解决实际需求,案例分享。
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吧!
到此这篇关于Golang实现Json转结构体的示例详解的文章就介绍到这了,更多相关Golang Json转结构体内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!