为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
大话西游666 2022-08-30 14:39:30
在这里,我从Api获取关闭数据,但我获得相反的数据。期待 (2021-05-07 1931.3 ) 但得到 ( 2005-08-17 534.169 ) 所以为什么我得到相反的数据,我该如何解决这个问题,帮助package mainimport (    "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)}数据截图 - 在此处输入图像描述
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

这是因为您正在取消编组到映射中,并且映射是无序的,就像 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-07

Closing Price: 1931.3

repl.it 链接:https://replit.com/@RamarajaRamanuj/SortTimeSlice

查看输出会很慢,因为 repl.it 启动需要一些时间。


在这里,您将遍历地图,将条目存储在切片中,并按日期的升序对切片进行排序。


现在,切片按最早日期作为第一个元素,最晚日期作为最后一个元素排序。您只需选择最后一个元素即可了解最新的收盘价。timeSeries


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信