Golang unmarshal вложенное json в структуру - PullRequest
0 голосов
/ 07 апреля 2020

Я довольно новичок в Go и все еще борюсь с некоторыми понятиями. Я все погуглил, чтобы найти решение, но все, что я пытаюсь, кажется, не работает; Я думаю, что я испортил свои структуры. Я использую Alpha Vantage API и пытаюсь разобрать ответ в структуру, но она возвращает пустую структуру. вот мой код:

package main

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

type stockData struct {
    GlobalQuote string
    tickerData  tickerData
}

type tickerData struct {
    Symbol           string `json:"01. symbol"`
    Open             string `json:"02. open"`
    High             string `json:"03. high"`
    Low              string `json:"04. low"`
    Price            string `json:"05. price"`
    Volume           string `json:"06. volume"`
    LatestTradingDay string `json:"07. latest trading day"`
    PreviousClose    string `json:"08. previous close"`
    Change           string `json:"09. change"`
    ChangePercent    string `json:"10. change percent"`
}

func main() {
    // Store the PATH environment variable in a variable
    AVkey, _ := os.LookupEnv("AVkey")

    // This is a separate function that is not necessary for this question
    url := (buildQueryURL("GOOG", AVkey))

    resp, err := http.Get(url)
    if err != nil {
        fmt.Println(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
    }
    bodyString := fmt.Sprintf("%s", body)

    var data stockData
    if err := json.Unmarshal([]byte(bodyString), &data); err != nil {
        panic(err)
    }

    fmt.Println(data)
}

но он возвращает следующее:

{ {         }}

А вот тело json:

bodyString := `{
    "Global Quote": {
        "01. symbol": "GOOG",
        "02. open": "1138.0000",
        "03. high": "1194.6600",
        "04. low": "1130.9400",
        "05. price": "1186.9200",
        "06. volume": "2644898",
        "07. latest trading day": "2020-04-06",
        "08. previous close": "1097.8800",
        "09. change": "89.0400",
        "10. change percent": "8.1102%"
    }
}`

Где я? пошло не так? Я думаю, что это связано с пользовательскими структурами, но я не смог исправить это с помощью поисков Google.

1 Ответ

1 голос
/ 07 апреля 2020

Измените тип stockData, чтобы он соответствовал структуре данных JSON:

type stockData struct {
    GlobalQuote tickerData `json:"Global Quote"`
}

Попробуйте запустить его на детской площадке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...