Как получить JSON из API и подсчитать количество голубей - PullRequest
0 голосов
/ 23 марта 2020

Итак, я пытаюсь получить число голубей из 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"
        }
    ]
}

Уже сделал этот фрагмент кода, который получает JSON от API, но так как я У меня нет опыта в 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)
}

1 Ответ

4 голосов
/ 23 марта 2020

В документе JSON, который возвращается, pigeons - это массив, и похоже, что длина этого массива - это число голубей. Так что, если вы удалите это в структуру, которая принимает и массив для голубей, вы можете получить длину этого:

type pigeons struct {
   Pigeons []interface{} `json:"pigeons"`
}

Выше, вы можете демонтировать поле pigeons в массив интерфейса, потому что вы не ' заботиться о содержании поля. Если вам нужно обработать содержимое, вам нужна отдельная структура и использовать ее массив. Тогда:

var p pigeons
json.Unmarshal(body, &p)
fmt.Printf("%d",len(p.Pigeons))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...