首頁 > 後端開發 > Golang > 主體

我的 API 回應正文似乎被截斷了?

WBOY
發布: 2024-02-05 21:57:08
轉載
574 人瀏覽過

我的 API 响应正文似乎被截断了?

問題內容

我是第一次涉足GO,我用來取得股票價格的API 接受多個股票代號(想想股票ID; NVDA => Nvidia),以減少我有限的API 呼叫。 然而,當嘗試獲取多個程式碼時,正文似乎被切斷:

{
    "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 ": ""
登入後複製

在郵差直接對 Stock API 進行精確呼叫會回傳:

{
    "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"
        }
    ]
}
登入後複製

我認為我做錯了什麼(昨天之前我從未接觸過 GO) 相關程式碼如下:

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
}
登入後複製

上下文結構:

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"`
}
登入後複製

在查看了幾個線程後,我嘗試使用 json.Unmarshaljson.NewDecoder().Decode() 但仍然沒有運氣。上面的截止字串來自正文,當使用 DecodeUnmarshal 時,它成功地將單一完整物件新增至 apiResponseData 中。我可以理解這是否是一個巨大的回應,但這看起來很簡單,所以我不得不假設我犯了一個非常明顯的菜鳥錯誤。

任何幫助將不勝感激。


正確答案


您正在嘗試使用包含時區偏移量(“Z07:00”)的格式來解析時間字串。

您需要將時間佈局調整為以下。

layout := "2006-01-02T15:04:05.000000"
登入後複製

您的錯誤處理不正確,這就是為什麼您也能夠以錯誤的回應退出。

以上是我的 API 回應正文似乎被截斷了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板