首页 > 其他分享 >Go:Json转结构体

Go:Json转结构体

时间:2022-10-18 14:58:56浏览次数:76  
标签:http string err fmt json Println Json Go 结构

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

  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}
  1. 将响应结果(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
  1. 来自最好的总结

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

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

标签:http,string,err,fmt,json,Println,Json,Go,结构
From: https://www.cnblogs.com/ttropsstack/p/16802532.html

相关文章