在Golang中将Json转换为字符串

5
我将尝试将我从第三方API获取的JSON响应转换为字符串以便在网页上呈现。我的第一次尝试是创建一个名为money的结构体,该结构体包含返回的3个值,然后对字节进行Unmarshel,但我没有看到任何显示。
这是结构体:
type money struct {
Base     string  `json:"base"`
Currency string  `json:"currency"`
Amount   float32 `json:"amount"`}

getCurrency() 函数内部

    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"}}

能否说明一下?你得到一个JSON响应,然后将其解析为一个"money"结构,然后你想将其转换回字符串?能否将原始JSON发送到网页?如果不行,尝试使用json.Marshal将其转换为字符串。 - Eugene Lisitsky
@EugeneLisitsky 是的,我可以通过 fmt.Fprintln(w, string(answer)) 正常将原始 JSON 发送到网页。我想做的是显示特定的值,比如货币,而不是整个 JSON。 - M.A.G
不要忽略从json.Unmarshal返回的错误。 - Peter
1个回答

9

我不得不从“amount”值中删除双引号,以便可以解析为float32:

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

在Playground上查看: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)
}

但是 str 不是硬编码的吗?如果我直接从 API 获取 JSON,那该怎么去掉双引号呢? - M.A.G
我也更新了我的代码,以澄清API部分。 - M.A.G
1
如果你必须使用双引号解析,请在你的结构体中将Amount的类型更改为字符串。 - Everton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接