2017-03-25 15 views
0

私は、次のようなJSONデータを持っている:Goで配列jsonを解析するには?

[ 
    { 
     "id": "bitcoin", 
     "name": "Bitcoin", 
     "symbol": "BTC", 
     "rank": "1", 
     "price_usd": "960.094", 
     "price_btc": "1.0", 
     "24h_volume_usd": "438149000.0", 
     "market_cap_usd": "15587054083.0", 
     "available_supply": "16234925.0", 
     "total_supply": "16234925.0", 
     "percent_change_1h": "-0.76", 
     "percent_change_24h": "-7.78", 
     "percent_change_7d": "-14.39", 
     "last_updated": "1490393946" 
    } 
] 

を私は持っている2構造体:

resp, err := http.Get("https://api.coinmarketcap.com/v1/ticker/?limit=1") 
defer resp.Body.Close() 
v := Currency{} 
body, err := ioutil.ReadAll(resp.Body) 
json.Unmarshal(body, &v) 

しかし、それがない:私はこの呼び出しによって返された配列を解析したい

type Valute struct { 
    Id  string `json:"id"` 
    Name string `json:"name"` 
    Symbol string `json:"symbol"` 
} 

type Currency struct { 
    Result []Valute 
} 

私のために働かない。通貨は空です。

var valutes []Valute 
json.Unmarshal(body, &valutes) 

しかし、私は構造体を使用したい:

それは配列で動作します。

答えて

3

通貨構造体は、json.Unmarshalerインターフェイスを実装するだけで済みます。

func (c *Currency) UnmarshalJSON(b []byte) error { 
    return json.Unmarshal(b, &c.Result) 
} 
2

また、単にjson.Unmarshal(body, &v.Result)

に変更することができます