提问人:lemonsrule101 提问时间:8/8/2022 最后编辑:lemonsrule101 更新时间:8/8/2022 访问量:803
如何将来自 HTTP Get 请求的数据存储在结构片中
How to store data from a HTTP Get request in a slice of structs
问:
问题我是 Go 的新手,我正在尝试将 json 数据存储在 Gov.uk public holidays API 的结构中,以便我稍后可以在前端使用它。
如果我跑
var sb = string(body)
fmt.Println(sb)
我可以看到终端中返回的数据。我知道响应正文由字节组成,上面将其转换为字符串。
我想遍历响应正文并将数据存储在一个名为 的结构体切片中,每个结构体将包含单个公共假日的数据。出于某种原因,holidays 变量返回一个空切片:。holidays
[]
我想我的两个问题是:
- 将 json 数据转换为结构切片以供以后使用的最佳方法是什么?
- 为什么 holidays 变量返回一个空切片?
谢谢!
这是我的代码如下: 包主
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
type Response struct {
Data []Data
}
type Data struct {
Division string
Bankholiday Bankholiday
}
type Bankholiday struct {
Title string
Date string
}
func main() {
resp, err := http.Get("https://www.gov.uk/bank-holidays.json")
if err != nil {
log.Fatal(err)
}
if resp.Body != nil {
defer resp.Body.Close()
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
var response Response
json.Unmarshal(body, &response)
var holidays = []Bankholiday{}
for _, date := range response.Data {
holidays = append(holidays, Bankholiday{
Title: date.Bankholiday.Title,
Date: date.Bankholiday.Date,
})
}
fmt.Println("holidays: ", holidays)
}
答:
2赞
Qasim Sarfraz
8/8/2022
#1
我必须调整响应以处理正确的数据解组。在下面找到工作代码:struct
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
)
type Response map[string]Data
type Data struct {
Division string `json:"division"`
Events []struct {
Title string `json:"title"`
Date string `json:"date"`
Notes string `json:"notes"`
Bunting bool `json:"bunting"`
} `json:"events"`
}
func main() {
resp, err := http.Get("https://www.gov.uk/bank-holidays.json")
if err != nil {
log.Fatal(err)
}
if resp.Body != nil {
defer resp.Body.Close()
}
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
var response Response
if err = json.Unmarshal(body, &response); err != nil {
log.Fatalln(err)
}
for div, _ := range response {
for _, event := range response[div].Events {
fmt.Printf("Division=%s, Holiday=%s, Date=%s\n", div, event.Title, event.Date)
}
}
}
0赞
mo1ein
8/8/2022
#2
因为你的 json 字段必须与你的结构相匹配。
type Response map[string]Data
type Data struct {
Division string `json:"division"`
Events []Event `json:"events"`
}
type Event struct {
Title string `json:"title"`
Date string `json:"date"`
Notes string `json:"notes"`
Bunting bool `json:"bunting"`
}
评论
struct
"england-and-wales"
struct
io.ReadAll
json.NewDecoder(resp.Body)