[英]Parsing JSON returns EOF
I seem to overlook something.我似乎忽略了什么。 Trying to decode some json into a struct.
试图将一些 json 解码为结构。 I have checked that the json response is valid.
我检查了 json 响应是否有效。 Typing the URL into the browser returns that valid json.
在浏览器中输入 URL 会返回有效的 json。 For some reason, though I still get an error
EOF
.出于某种原因,尽管我仍然收到错误
EOF
。 I have also used the json-to-go to verify my structs.我还使用json-to-go来验证我的结构。 Error is thrown at the
json.NewDecoder(response.Body).Decode(&servResp)
part json.NewDecoder(response.Body).Decode(&servResp)
部分抛出错误
Code:代码:
type OnvistaServiceCallCandleData struct {
Status string `json:"status"`
ErrorMsg string `json:"errorMsg"`
Result []AssetData `json:"result"`
}
type AssetData struct {
Date string `json:"date"`
Open string `json:"open"`
High string `json:"high"`
Low string `json:"low"`
Close string `json:"close"`
Volume string `json:"volume"`
}
func ServiceOnvistaAssetData(data OnvistaInstrument) ([]models.InstrumentData, error) {
url := "some-valid-url"
myClient := http.Client{
Timeout: time.Second * 10,
}
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(url)
response, getErr := myClient.Do(req)
if getErr != nil {
log.Fatal(getErr)
}
if response.Body != nil {
defer response.Body.Close()
} else {
fmt.Println("response.Body nil")
}
servResp := OnvistaServiceCallCandleData{}
jsonErr := json.NewDecoder(response.Body).Decode(&servResp)
if jsonErr != nil {
log.Fatal(jsonErr)
}
if servResp.Status == "error" {
return []models.InstrumentData{}, errors.New(servResp.ErrorMsg)
}
currentLocation := time.Now().Location()
toReturn := []models.InstrumentData{}
for i := range servResp.Result {
s := strings.Split(servResp.Result[i].Date, ".")
dataTimestamp := time.Date(parseInt(s[2]), time.Month(parseInt(s[1])), parseInt(s[0]), 0, 0, 0, 0, currentLocation)
newToReturn := models.InstrumentData{
InstrumentID: data.InstrumentID,
DataTimestamp: dataTimestamp,
Open: parseFloat(servResp.Result[i].Open),
Close: parseFloat(servResp.Result[i].Close),
High: parseFloat(servResp.Result[i].High),
Low: parseFloat(servResp.Result[i].Low),
Volume: parseFloat(servResp.Result[i].Volume),
}
toReturn = append(toReturn, newToReturn)
}
return toReturn, nil
}
Ok I figured out what was wrong.好的,我知道出了什么问题。 In the URL I had some whitespace.
在 URL 中,我有一些空格。 So
url.QueryEscape()
each parameter did the trick.所以
url.QueryEscape()
每个参数都可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.