如何从 API 获取 JSON 并计算鸽子的数量

所以我试图从具有这种格式的 JSON 中获取鸽子的数量。这个 JSON 包含很多鸟类类型,每一种都由他的颜色和最后联系方式定义:


{

    "url": "http://localhost:9001/",

    "pigeons": [

        {

            "color": "white",

            "lastContact": "2020-03-23T14:46:20.806Z"

        },

        {

            "color": "grey",

            "lastContact": "2020-03-23T14:46:20.807Z"

        }

    ],

    "parrots": [

        {

            "color": "green",

            "lastContact": "2020-03-23T14:46:20.806Z"

        }

    ]

}

已经做了这段从 API 获取 JSON 的代码,但是由于我没有任何 Go 经验,你们能帮我从这里数一下鸽子的数量吗?我真的不在乎其他鸟类的数量。


package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

    "time"

)


type pigeons struct {

    Number int `json:"something"`

}


func main() {


    url := "http://localhost:9001"


    birdsClient := 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 := birdsClient.Do(req)

    if getErr != nil {

        log.Fatal(getErr)

    }


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

    if readErr != nil {

        log.Fatal(readErr)

    }


    pigeons1 := pigeons{}

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

    if jsonErr != nil {

        log.Fatal(jsonErr)

    }


    fmt.Println(pigeons1.Number)

}


慕姐8265434
浏览 60回答 1
1回答

万千封印

在返回的 JSON 文档中,pigeons是一个数组,看起来该数组的长度是鸽子的数量。因此,如果您将其解组为一个接受鸽子数组的结构,您可以获得它的长度:type pigeons struct {   Pigeons []interface{} `json:"pigeons"`}上面,您可以将pigeons字段解组为接口数组,因为您不关心字段的内容。如果您需要处理内容,则需要一个单独的结构并使用它的数组。然后:var p pigeonsjson.Unmarshal(body, &p)fmt.Printf("%d",len(p.Pigeons))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go