我在Go中制作货币转换器,下载JSON文件,然后读取它以打印当前货币汇率。我无法理解如何打印该值,我知道我必须使用Unmarshal,但我不明白如何使用它。
例如,我想从JSON文件中打印值1.4075
。
这是JSON文件(来自here):
{"base":"GBP","date":"2016-04-08","rates":{"USD":1.4075}}
这是我到目前为止所做的。
package main
import(
"encoding/json"
"fmt"
"io/ioutil"
)
func main(){
fromCurrency:="GBP"
toCurrency:="USD"
out, err := os.Create("latest.json")
if err != nil{
fmt.Println("Error:", err)
}
defer out.Close()
resp, err := http.Get("http://api.fixer.io/latest?base=" + fromCurrency + "&symbols=" + toCurrency)
defer resp.Body.Close()
_, err = io.Copy(out, resp.Body)
if err!= nil{
fmt.Println("Error:", err)
}
}
答案 0 :(得分:2)
Decode对与响应形状匹配的类型的响应。例如:
var data struct {
Base string
Date string
Rates map[string]float64
}
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
log.Fatal(err)
}
打印适当的值:
if r, ok := data.Rates["USD"]; ok {
log.Println("Rate", r)
} else {
log.Println("no rate")
}