使用golang解析JSON HTTP响应

我试图从下面的curl输出中获取说“ ip”的值:

{  

"type":"example",

"data":{

"name":"abc",

"labels":{

"key":"value"

}

},

"subsets":[

{

"addresses":[

{

"ip":"192.168.103.178"

}

],

"ports":[

{

"port":80

}

]

}

]

}

我在互联网上发现了许多示例来解析curl请求的json输出,并且编写了以下代码,但这似乎并没有给我说“ ip”的值

package main

import (

"encoding/json"

"fmt"

"io/ioutil"

"log"

"net/http"

"time"

)

type svc struct {

Ip string `json:"ip"`

}

func main() {

url := "http://myurl.com"

testClient := http.Client{

Timeout: time.Second * 2, // Maximum of 2 secs

}

req, err := http.NewRequest(http.MethodGet, url, nil)

if err != nil {

log.Fatal(err)

}

res, getErr := testClient.Do(req)

if getErr != nil {

log.Fatal(getErr)

}

body, readErr := ioutil.ReadAll(res.Body)

if readErr != nil {

log.Fatal(readErr)

}

svc1 := svc{}

jsonErr := json.Unmarshal(body, &svc1)

if jsonErr != nil {

log.Fatal(jsonErr)

}

fmt.Println(svc1.Ip)

}

如果有人可以向我提示我需要添加到代码中以获得“ ip”值的提示,我将不胜感激。

回答:

您可以创建结构来模仿json结构,然后对json进行解码。

package main

import (

"bytes"

"encoding/json"

"fmt"

"log"

)

type Example struct {

Type string `json:"type,omitempty"`

Subsets []Subset `json:"subsets,omitempty"`

}

type Subset struct {

Addresses []Address `json:"addresses,omitempty"`

}

type Address struct {

IP string `json:"IP,omitempty"`

}

func main() {

m := []byte(`{"type":"example","data": {"name": "abc","labels": {"key": "value"}},"subsets": [{"addresses": [{"ip": "192.168.103.178"}],"ports": [{"port": 80}]}]}`)

r := bytes.NewReader(m)

decoder := json.NewDecoder(r)

val := &Example{}

err := decoder.Decode(val)

if err != nil {

log.Fatal(err)

}

// If you want to read a response body

// decoder := json.NewDecoder(res.Body)

// err := decoder.Decode(val)

// Subsets is a slice so you must loop over it

for _, s := range val.Subsets {

// within Subsets, address is also a slice

// then you can access each IP from type Address

for _, a := range s.Addresses {

fmt.Println(a.IP)

}

}

}

输出为: 192.168.103.178

通过将其解码为一个结构,您可以循环遍历任何切片,而不会局限于一个IP

这里的例子:

https://play.golang.org/p/sWA9qBWljA

以上是 使用golang解析JSON HTTP响应 的全部内容, 来源链接: utcz.com/qa/430466.html

回到顶部