将JSON数组返回到Struct Golang
我的主要目标是将JSON对象传递回客户端。但是,我在结构中不断得到零或空值。如何获得预期和期望的JSON数组响应?下面是我的代码片段将JSON数组返回到Struct Golang,json,go,Json,Go,我的主要目标是将JSON对象传递回客户端。但是,我在结构中不断得到零或空值。如何获得预期和期望的JSON数组响应?下面是我的代码片段 package main import ( "net/http" "fmt" "encoding/json" ) type News struct { NewsID int `json:"newsId"` PlayerID int `json:"playerId"` TeamID
package main
import (
"net/http"
"fmt"
"encoding/json"
)
type News struct {
NewsID int `json:"newsId"`
PlayerID int `json:"playerId"`
TeamID int `json:"teamId"`
Team string `json:"team"`
Title string `json:"title"`
Content string `json:"content"`
Url string `json:"url"`
Source string `json:"source"`
TermsOfUse string `json:"terms"`
Updated string `json:"updated"`
}
func GetBoxScore (w http.ResponseWriter, r *http.Request) {
news := News{}
req, _ := http.NewRequest("GET","https://api.fantasydata.net/v3/nhlpb/scores/JSON/News", nil)
req.Header.Set("Ocp-Apim-Subscription-Key", "API KEY")
req.Host = "api.fantasydata.net"
client := &http.Client{}
res, err := client.Do(req)
defer res.Body.Close()
if err != nil {
fmt.Printf("The HTTP request failed with error %s\n", err)
}
err = json.NewDecoder(r.Body).Decode(&news)
newsJson, err := json.Marshal(news)
if err != nil {
panic(err)
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusAccepted)
w.Write(newsJson)
}
当前,响应是我的空新闻结构,所有的值都为零。我希望得到的答复如下:
[
{
"NewsID": 8919,
"PlayerID": 30003647,
"TeamID": 28,
"Team": "VAN",
"Title": "Rumors have Elias Pettersson back this week",
"Content": "The rumor mill has Elias Pettersson (concussion) returning this week.",
"Url": "http://www.rotoworld.com/player/nhl/5819/elias-pettersson",
"Source": "NBCSports.com",
"TermsOfUse": "NBCSports.com feeds in the RSS format are provided free of charge for use by individuals for personal, non-commercial uses. More details here: http://fantasydata.com/resources/rotoworld-rss-feed.aspx",
"Updated": "2018-10-21T11:54:00"
},
{
"NewsID": 8918,
"PlayerID": 30000294,
"TeamID": 10,
"Team": "NJ",
"Title": "Cory Schneider gives up three in AHL loss",
"Content": "Cory Schneider (hip) played for the first time this season, albeit in the AHL.",
"Url": "http://www.rotoworld.com/player/nhl/2139/cory-schneider",
"Source": "NBCSports.com",
"TermsOfUse": "NBCSports.com feeds in the RSS format are provided free of charge for use by individuals for personal, non-commercial uses. More details here: http://fantasydata.com/resources/rotoworld-rss-feed.aspx",
"Updated": "2018-10-21T08:01:00"
},
]
这里我要提到两件事。首先,你是否得到了预期的回应?你可能想检查一下 第二,您提供的json是一个新闻数组,而不是一条新闻。您可能希望将新闻类型更改为数组而不是单个新闻
type NewsItem struct {
NewsID int `json:"newsId"`
PlayerID int `json:"playerId"`
TeamID int `json:"teamId"`
Team string `json:"team"`
Title string `json:"title"`
Content string `json:"content"`
Url string `json:"url"`
Source string `json:"source"`
TermsOfUse string `json:"terms"`
Updated string `json:"updated"`
}
type News []NewsItem
在下面的行中
err = json.NewDecoder(r.Body).Decode(&news)
您正在传递news struct,其中json实际上是一个数组。因此,您需要创建一个新闻结构片段,然后传递它
newsList := make([]News,0)
err = json.NewDecoder(r.Body).Decode(&newsList)
代码中的
解码
未填充新闻结构。如果在err=json.NewDecoder(r.Body).Decode(&news)
之后打印新闻变量,您将看到这一点。这可能是因为response.Body
中的json与您期望的不同。尝试打印出response.Body
缓冲区的内容。