Maison > développement back-end > Golang > le corps du texte

Le corps de ma réponse API semble tronqué ?

WBOY
Libérer: 2024-02-05 21:57:08
avant
582 Les gens l'ont consulté

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

Contenu de la question

Je me lance dans GO pour la première fois et l'API que j'utilise pour obtenir les cours des actions accepte plusieurs tickers (pensez aux identifiants d'actions ; NVDA => Nvidia) pour réduire mes appels API limités. Cependant, lorsque vous essayez d'obtenir plusieurs codes, le corps du texte semble être coupé :

{
    "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 ": ""
Copier après la connexion

Appeler exactement l'API Stock directement dans les retours Postman :

{
    "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"
        }
    ]
}
Copier après la connexion

Je pense que j'ai fait quelque chose de mal (je n'avais jamais touché à GO avant hier) Le code pertinent est le suivant :

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
}
Copier après la connexion

Structure du contexte :

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"`
}
Copier après la connexion

Après avoir regardé quelques discussions, j'ai essayé d'utiliser json.Unmarshaljson.NewDecoder().Decode() 但仍然没有运气。上面的截止字符串来自正文,当使用 DecodeUnmarshal 时,它成功地将单个完整对象添加到 apiResponseData Medium. Je peux comprendre s'il s'agit d'une réponse énorme, mais cela semble si simple que je dois supposer que je fais une erreur de débutant très évidente.

Toute aide serait grandement appréciée.


Bonne réponse


Vous essayez d'analyser une chaîne horaire en utilisant un format qui contient un décalage de fuseau horaire ("Z07:00").

Vous devez ajuster la disposition temporelle comme suit.

layout := "2006-01-02T15:04:05.000000"
Copier après la connexion

Votre gestion des erreurs est incorrecte, c'est pourquoi vous pouvez également quitter avec une réponse incorrecte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal