最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 我的 API 响应正文似乎被截断了?

    我的 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"

    您的错误处理不正确,这就是为什么您也能够以错误的响应退出。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 我的 API 响应正文似乎被截断了?
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情