2015-09-25 5 views
0

У меня есть следующая часть кода, которая называет yahoo finance api, чтобы получить значения запасов для данного символа акции.Как получить значения из JSON в golang

package main 

import (
    "encoding/json" 
    "fmt" 
    "io/ioutil" 
    "net/http" 
    "os" 
) 

//Response structure 
type Response struct { 
    Query struct { 
     Count int `json:"count"` 
     Created string `json:"created"` 
     Lang string `json:"lang"` 
     Results struct { 
      Quote []struct { 
       LastTradePriceOnly string `json:"LastTradePriceOnly"` 
      } `json:"quote"` 
     } `json:"results"` 
    } `json:"query"` 
} 

func main() { 
    var s Response 
    response, err := http.Get("http://query.yahooapis.com/v1/public/yql?q=select%20LastTradePriceOnly%20from%20yahoo.finance.quote%20where%20symbol%20in%20(%22AAPL%22,%22FB%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys") 
    if err != nil { 
     fmt.Printf("%s", err) 
     os.Exit(1) 
    } else { 
     defer response.Body.Close() 

     contents, err := ioutil.ReadAll(response.Body) 
     json.Unmarshal([]byte(contents), &s) 
     fmt.Println(s.Query.Results.Quote) 

     if err != nil { 
      fmt.Printf("%s", err) 
      os.Exit(1) 
     } 
     fmt.Printf("%s\n", string(contents)) 
    } 
} 

fmt.Println (s.Query.Results.Quote) дает мне массив несколько значений, так как котировка массив структуры. Например: [{52.05}, {114.25}] Как мне разделить его на одно значение в golang? Для например: 52.05 114.25

Помощь очень ценю. Спасибо

ответ

2

Я новичок в golang и не знаю многих структур данных. Но я понял, как получить одно значение из массива структуры.

fmt.Println(s.Query.Results.Quote[0].LastTradePriceOnly) 

Это сработало для меня. Мне нужно только повторить это в цикле, чтобы получить все значения.

Спасибо.

+1

Вы упомянули, что были новыми, поэтому обратите внимание, если вы это знаете, но вы можете использовать: для _, q: = диапазон s.Query.Results.Quote {q.LastTradePriceOnly} (как простая итерация). Кроме того, если вы создадите LastTradePriceOnly для типа float64 (или float32), он будет разбираться в числовой форме. не делайте этого, если он иногда не является числовым –

+0

Спасибо за ответ Дэвид. Я буду считать это :) –