经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JSON » 查看文章
Golang实现Json转结构体的示例详解
来源:jb51  时间:2023/2/20 15:16:34  对本文有异议

解决实际需求,案例分享。

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!

 友情链接:直通硅谷  点职佳