2016-04-09 9 views
1

私は、JSONファイルをダウンロードして現在の通貨レートを印刷するために、Goで通貨コンバータを作成しています。私は値を印刷する方法を理解することができません、私はUnmarshalを使用する必要があることを知っていますが、私はそれを使用する方法を理解していません。GoでのJSONファイルからの値の印刷

たとえば、値1.4075をJSONファイルから印刷したいとします。ここで

は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) 
    } 
} 

答えて

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

+0

はどうもありがとうございました。これは私が探していたものです! –