Преобразование Json в строку в Голанге - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь преобразовать ответ JSON, полученный от стороннего API, в строку, чтобы можно было отобразить его на веб-странице.Сначала я попытался создать структуру под названием money, которая содержит 3 возвращаемых значения, а затем Unmarshel байты, но я ничего не отображаю

Вот структура

type money struct {
Base     string  `json:"base"`
Currency string  `json:"currency"`
Amount   float32 `json:"amount"`}

и внутри getCurrency() func

    response, err := http.Get("https://api.coinbase.com/v2/prices/spot?currency=USD")

if err != nil {
    fmt.Printf("The http requst failed with error %s \n", err)
} else {
    answer, _ := ioutil.ReadAll(response.Body)
    response := money{}
    json.Unmarshal([]byte(answer), &response)
    fmt.Fprintln(w, response)
    fmt.Fprintln(w, response.Currency)


}

Наконец, вот что я получаю из ответа json

 {"data":{"base":"BTC","currency":"USD","amount":"4225.87"}}

1 Ответ

0 голосов
/ 02 декабря 2018

Мне пришлось убрать двойные кавычки из значения «количество», чтобы разрешить анализ в float32:

 {"data":{"base":"BTC","currency":"USD","amount":4225.87}}

См. На игровой площадке: https://play.golang.org/p/4QVclgjrtyi

Полный код:

package main

import (
    "encoding/json"
    "fmt"
)

type money struct {
    Base     string  `json:"base"`
    Currency string  `json:"currency"`
    Amount   float32 `json:"amount"`
}

type info struct {
    Data money
}

func main() {
    str := `{"data":{"base":"BTC","currency":"USD","amount":4225.87}}`

    var i info

    if err := json.Unmarshal([]byte(str), &i); err != nil {
        fmt.Println("ugh: ", err)
    }

    fmt.Println("info: ", i)
    fmt.Println("currency: ", i.Data.Currency)
}
...