使用 Go 从 Api 获取相反的数据

在这里,我从Api获取关闭数据,但我获得相反的数据。期待 (2021-05-07 1931.3 ) 但得到 ( 2005-08-17 534.169 ) 所以为什么我得到相反的数据,我该如何解决这个问题,帮助


package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

)


type Data struct {

    MetaData        MetaData               `json:"Meta Data"`

    TimeSeriesDaily map[string]DataElement `json:"Time Series (Daily)"`

}

type MetaData struct {

    OneInformation     string `json:"1. Information"`

    TwoSymbol          string `json:"2. Symbol"`

    ThreeLastRefreshed string `json:"3. Last Refreshed"`

    FiveOutputSize     string `json:"5. Output Size"`

    SixTimeZone        string `json:"6. Time Zone"`

}


type DataElement struct {

    OneOpen    string `json:"1. open"`

    TwoHigh    string `json:"2. high"`

    ThreeLow   string `json:"3. low"`

    FourClose  string `json:"4. close"`

    FiveVolume string `json:"5. volume"`

}


func main() {

    resp, err := http.Get("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=RELIANCE.BSE&outputsize=full&apikey=BV68V9VC5MTQFJRT")

    if err != nil {

        return

    }

    defer resp.Body.Close()


    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        log.Fatal(err)

    }


    var y Data

    err = json.Unmarshal(body, &y)

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(y)

    var l string

    var lop string

    for k, data := range y.TimeSeriesDaily {

        _, lop, l = ("%s closed at %s\n"), (k), (data.FourClose)

    }

    fmt.Println(lop, l)

}

数据截图 - 在此处输入图像描述


大话西游666
浏览 70回答 1
1回答

MMTTMM

这是因为您正在取消编组到映射中,并且映射是无序的,就像 JSON 对象一样。因此,每次循环时,您都会得到不同的值。TimeSeriesDailyTimeSeriesDaily您可以通过以下代码解决此问题,    timeSeries := make([]map[string]DataElement, 0)    for date, data := range y.TimeSeriesDaily {        timeSeries = append(timeSeries, map[string]DataElement{date: data})    }    sort.Slice(timeSeries, func(i, j int) bool {        layout := "2006-01-02"        var date1 time.Time        for k := range timeSeries[i] {            date1, err = time.Parse(layout, k)            if err != nil {                fmt.Println(err)            }        }        var date2 time.Time        for k := range timeSeries[j] {            date2, err = time.Parse(layout, k)            if err != nil {                fmt.Println(err)            }        }        return date1.Before(date2)    })    for k, v := range timeSeries[len(timeSeries)-1] {        fmt.Println("Closing Date: " + k)        fmt.Println("Closing Price: " + v.FourClose)    }输出:Closing Date: 2021-05-07Closing Price: 1931.3repl.it 链接:https://replit.com/@RamarajaRamanuj/SortTimeSlice查看输出会很慢,因为 repl.it 启动需要一些时间。在这里,您将遍历地图,将条目存储在切片中,并按日期的升序对切片进行排序。现在,切片按最早日期作为第一个元素,最晚日期作为最后一个元素排序。您只需选择最后一个元素即可了解最新的收盘价。timeSeries
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go