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

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

1.请求Zabbix API,通过itemid获取到AppName(应用集名称)

  1. package?main
  2.  
  3. import?(
  4. ?"encoding/json"
  5. ?"fmt"
  6. ?"io/ioutil"
  7. ?"log"
  8. ?"net/http"
  9. ?"strings"
  10. )
  11.  
  12. func?PostRequest(payload?string,?url?string)?{
  13. ?method?:=?"POST"
  14. ?pl?:=?strings.NewReader(payload)
  15. ?client?:=?&http.Client{}
  16. ?req,?err?:=?http.NewRequest(method,?url,?pl)
  17.  
  18. ?if?err?!=?nil?{
  19. ??fmt.Println(err)
  20. ??return
  21. ?}
  22. ?req.Header.Add("Content-Type",?"application/json")
  23.  
  24. ?res,?err?:=?client.Do(req)
  25. ?if?err?!=?nil?{
  26. ??fmt.Println(err)
  27. ??return
  28. ?}
  29. ?defer?res.Body.Close()
  30.  
  31. ?body,?err?:=?ioutil.ReadAll(res.Body)
  32.  
  33. ?if?err?!=?nil?{
  34. ??log.Println(err)
  35. ??return
  36. ?}
  37. ?fmt.Println(string(body))
  38. }
  39.  
  40. func?main()?{
  41. ?const?api?=?"http://192.168.11.11:28080/api_jsonrpc.php"
  42. ?const?token?=?"a638200c24a8bea7f78cd5cabf3d1dd5"
  43. ?const?itemid?=?"33918"
  44.  
  45. ?a?:=?fmt.Sprintf(`{
  46. ??"jsonrpc":?"2.0",
  47. ??"method":?"application.get",
  48. ??"params":?{"itemids":?"%s"},
  49. ??"auth":?"%s","id":?2
  50. ??}`,?itemid,?token)
  51.  
  52. ?PostRequest(a,?api)
  53. }

响应结果:

{"jsonrpc":"2.0","result":[{"applicationid":"1574","hostid":"10354","name":"TEST","flags":"0","templateids":[]}],"id":2}

2.将响应结果(json)转结构体,方便取值

在原来代码的基础上,继续编码。

  1. package?main
  2.  
  3. import?(
  4. ?"encoding/json"
  5. ?"fmt"
  6. ?"io/ioutil"
  7. ?"log"
  8. ?"net/http"
  9. ?"strings"
  10. )
  11.  
  12. type?resultInfo?struct?{
  13. ?Applicationid?string???`json:"applicationid"`
  14. ?Hostid????????string???`json:"hostid"`
  15. ?Name??????????string???`json:"name"`
  16. ?Flags?????????string???`json:"flags"`
  17. ?Templateids???[]string?`json:"templateids"`
  18. }
  19.  
  20. type?resultArr?[]resultInfo
  21.  
  22. type?Response?struct?{
  23. ?Jsonrpc?string????`json:"jsonrpc"`
  24. ?Result??resultArr?`json:result`
  25. ?Id??????int???????`json:"id"`
  26. }
  27.  
  28. type?Byte?[]byte
  29.  
  30. func?JsonConvertStruct(body?Byte)?{
  31. ?var?response?Response
  32. ?json.Unmarshal([]byte(body),?&response)
  33. ?fmt.Println(response.Result[0].Name)
  34. }
  35.  
  36. func?PostRequest(payload?string,?url?string)?{
  37. ?method?:=?"POST"
  38. ?pl?:=?strings.NewReader(payload)
  39. ?client?:=?&http.Client{}
  40. ?req,?err?:=?http.NewRequest(method,?url,?pl)
  41.  
  42. ?if?err?!=?nil?{
  43. ??fmt.Println(err)
  44. ??return
  45. ?}
  46. ?req.Header.Add("Content-Type",?"application/json")
  47.  
  48. ?res,?err?:=?client.Do(req)
  49. ?if?err?!=?nil?{
  50. ??fmt.Println(err)
  51. ??return
  52. ?}
  53. ?defer?res.Body.Close()
  54.  
  55. ?body,?err?:=?ioutil.ReadAll(res.Body)
  56.  
  57. ?if?err?!=?nil?{
  58. ??log.Println(err)
  59. ??return
  60. ?}
  61. ?JsonConvertStruct(body)
  62. }
  63.  
  64. func?main()?{
  65. ?const?api?=?"http://192.168.11.11:28080/api_jsonrpc.php"
  66. ?const?token?=?"a638200c24a8bea7f78cd5cabf3d1dd5"
  67. ?const?itemid?=?"33918"
  68.  
  69. ?a?:=?fmt.Sprintf(`{
  70. ??"jsonrpc":?"2.0",
  71. ??"method":?"application.get",
  72. ??"params":?{"itemids":?"%s"},
  73. ??"auth":?"%s","id":?2
  74. ??}`,?itemid,?token)
  75.  
  76. ?PostRequest(a,?api)
  77. }

结果:

TEST

3.来自最好的总结

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

到此这篇关于Golang实现Json转结构体的示例详解的文章就介绍到这了,更多相关Golang Json转结构体内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号