在 Go 中使用外部 API 后使用 REST 客户端保存数据



我是Go的新手,他们创建了一个使用alphavantage API的REST客户端

我提出GET请求后出现的JSON结构如下所示。我只需要Time Series关键数据,以便我自己进行计算。如何从Time Series获取数据并保存数据,以便对数据进行自己的操作?

杰伦

{
"Meta Data": {
"1. Information": "Intraday (1min) prices and volumes",
"2. Symbol": "MSFT",
"3. Last Refreshed": "2018-05-25 16:00:00",
"4. Interval": "1min",
"5. Output Size": "Compact",
"6. Time Zone": "US/Eastern"
},
"Time Series (1min)": {
"2018-05-25 16:00:00": {
"1. open": "98.2700",
"2. high": "98.4400",
"3. low": "98.2650",
"4. close": "98.3600",
"5. volume": "2466507"
}
}
}

REST 客户端的代码

package main
import (
"net/http"
"fmt"
"io/ioutil"
//encode and decode JSON streams
"encoding/json"
)

func main() {
response, err := http.Get("https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=1min&apikey=demo")
if err!=nil{
fmt.Println(err)
return
}
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(contents))
}

按照建议使用接口是个好主意,但在这种情况下,由于您知道使用显式类型定义的响应的结构就足够了,并且应该更容易使用:

package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
type values map[string]string
type TimeSeries struct {
Item map[string]values `json:"Time Series (1min)"`
}
func main() {
response, err := http.Get("https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=1min&apikey=demo")
if err != nil {
fmt.Println(err)
return
}
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return
}
var ts TimeSeries
err = json.Unmarshal(contents, &ts)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%#v", ts)
}

最新更新