共计 2331 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | 这篇文章主要为大家详细介绍了 Golang 实现 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}
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 转结构体的示例详解的文章就介绍到这了
正文完
星哥玩云-微信公众号
