如何在golang中从JSON获取值

时间:2015-09-25 23:06:09

标签: json go

我有以下代码调用yahoo finance api获取给定股票代码的股票价值。

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)给了我一个多值数组,因为Quote是一个结构数组。例如:[{52.05},{114.25}] 我应该如何在golang中将其拆分为单个值? 例如:52.05 114.25

非常感谢帮助。 感谢

1 个答案:

答案 0 :(得分:1)

我是Golang的新手,并不了解很多数据结构。但我想出了如何从结构数组中获取单个值。

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

这对我有用..我只需要在循环中迭代它以获取所有值。

感谢。