Heim >Backend-Entwicklung >Golang >Mein API-Antworttext scheint abgeschnitten zu sein?
Ich steige zum ersten Mal in GO ein und die API, die ich zum Abrufen von Aktienkursen verwende, akzeptiert mehrere Ticker (denken Sie an Aktien-IDs; NVDA => Nvidia), um meine begrenzten API-Aufrufe zu reduzieren. Beim Versuch, mehrere Codes abzurufen, scheint der Textkörper jedoch abgeschnitten zu sein:
{ "meta ": { "requested ": 2, "returned ": 2 }, "data ": [ { "ticker ": "MSFT ", "name ": "Microsoft Corporation ", "exchange_short ": null, "exchange_long ": null, "mic_code ": "IEXG ", "currency ": "USD ", "price ": 374.72, "day_high ": 376.92, "day_low ": 373.54, "day_open ": 374.94, "52_week_high ": 349.84, "52_week_low ": 213.43, "market_cap ": null, "previous_close_price ": 374.58, "previous_close_price_time ": "2023-12-22T15:59:56.000000 ", "day_change ": 0.04, "volume ": 165558, "is_extended_hours_price ": false, "last_trade_time ": "2023-12-26T16:00:00.000000 " }, { "ticker ": ""
Exakter Aufruf der Stock-API direkt in Postman-Retouren:
{ "meta": { "requested": 2, "returned": 2 }, "data": [ { "ticker": "MSFT", "name": "Microsoft Corporation", "exchange_short": null, "exchange_long": null, "mic_code": "IEXG", "currency": "USD", "price": 374.72, "day_high": 376.92, "day_low": 373.54, "day_open": 374.94, "52_week_high": 349.84, "52_week_low": 213.43, "market_cap": null, "previous_close_price": 374.58, "previous_close_price_time": "2023-12-22T15:59:56.000000", "day_change": 0.04, "volume": 165558, "is_extended_hours_price": false, "last_trade_time": "2023-12-26T16:00:00.000000" }, { "ticker": "PLTR", "name": "Palantir Technologies Inc", "exchange_short": null, "exchange_long": null, "mic_code": "IEXG", "currency": "USD", "price": 17.68, "day_high": 17.75, "day_low": 17.34, "day_open": 17.45, "52_week_high": 17.16, "52_week_low": 5.92, "market_cap": null, "previous_close_price": 17.42, "previous_close_price_time": "2023-12-22T15:59:56.000000", "day_change": 1.47, "volume": 236201, "is_extended_hours_price": false, "last_trade_time": "2023-12-26T15:59:58.000000" } ] }
Ich glaube, ich habe etwas falsch gemacht (ich hatte GO vor gestern noch nie berührt) Der relevante Code lautet wie folgt:
func getStockPriceData(ticker string) []Stock { baseURL, _ := url.Parse("https://api.stockdata.org") baseURL.Path += "v1/data/quote" params := url.Values{} params.Add("symbols", ticker) params.Add("api_token", apiToken.ApiToken) baseURL.RawQuery = params.Encode() req, _ := http.NewRequest("GET", baseURL.String(), nil) res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, err := io.ReadAll(res.Body) if err != nil { panic(err.Error()) } apiResponseData := ApiResponseStockData{} //json.NewDecoder(res.Body).Decode(&apiResponseData) err2 := json.Unmarshal(body, &apiResponseData) if err2 != nil { fmt.Println("whoops:", err2) } stocks := []Stock{} for _, data := range apiResponseData.ResponseStockData { stock := Stock{} stock.Name = data.Name stock.Ticker = data.Ticker stock.Price = data.Price stock.DayHigh = data.DayHigh stock.DayLow = data.DayLow stock.DayOpen = data.DayOpen stock.PreviousClosePrice = data.PreviousClosePrice stock.DayChange = data.DayChange stocks = append(stocks, stock) } return stocks }
Kontextstruktur:
type Stock struct { Name string `json:"name"` Ticker string `json:"ticker"` Price float64 `json:"price"` DayHigh float64 `json:"day_high"` DayLow float64 `json:"day_low"` DayOpen float64 `json:"day_open"` DayChange float64 `json:"day_change"` PreviousClosePrice float64 `json:"previous_close_price"` } type ApiResponseStockData struct { ResponseStockData []ResponseData `json:"data"` } type ResponseData struct { Name string `json:"name"` Ticker string `json:"ticker"` ExchangeShort bool `json:"exchange_short"` ExchangeLong bool `json:"exchange_long"` MicCode string `json:"mic_code"` Currency string `json:"currency"` Price float64 `json:"price"` DayHigh float64 `json:"day_high"` DayLow float64 `json:"day_low"` DayOpen float64 `json:"day_open"` DayChange float64 `json:"day_change"` YearHigh float64 `json:"52_week_high"` YearLow float64 `json:"52_week_low"` MarketCap float64 `json:"market_cap"` PreviousClosePrice float64 `json:"previous_close_price"` PreviousCloseTime time.Time `json:"previous_close_time"` Volume float64 `json:"volume"` IsExtendedHoursPrice bool `json:"is_extended_hours_price"` LastTradeTime time.Time `json:"last_trade_time"` }
Nachdem ich mir ein paar Threads angesehen hatte, habe ich versucht, json.Unmarshal
和 json.NewDecoder().Decode()
但仍然没有运气。上面的截止字符串来自正文,当使用 Decode
或 Unmarshal
时,它成功地将单个完整对象添加到 apiResponseData
Medium zu verwenden. Ich kann verstehen, wenn das eine große Reaktion ist, aber es scheint so einfach, dass ich davon ausgehen muss, dass ich einen ganz offensichtlichen Anfängerfehler mache.
Jede Hilfe wäre sehr dankbar.
Sie versuchen, eine Zeitzeichenfolge mithilfe eines Formats zu analysieren, das einen Zeitzonenversatz („Z07:00“) enthält.
Sie müssen das Zeitlayout wie folgt anpassen.
layout := "2006-01-02T15:04:05.000000"
Ihre Fehlerbehandlung ist falsch, deshalb können Sie auch mit einer falschen Antwort beenden.
Das obige ist der detaillierte Inhalt vonMein API-Antworttext scheint abgeschnitten zu sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!