从Go中的JSON文件打印值

时间:2016-04-09 22:19:39

标签: json go

我在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)
  }
}

1 个答案:

答案 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")
}

complete example