为了账号安全,请及时绑定邮箱和手机立即绑定

来自比特币 api 的 Golang json 查询返回无效字符

来自比特币 api 的 Golang json 查询返回无效字符

Go
翻翻过去那场雪 2021-11-01 16:23:50
有些东西告诉我我没有正确理解 json。我试图从http://api.bitcoincharts.com/v1/trades.csv?symbol=rockUSD获取一些数据,但我的 Unmarshal 似乎无法读取 json 数据。我是 golang(以及 json)的新手,我想知道我如何能够跳过我正在犯的那个错误的字符错误。我的错误:invalid character ',' after top-level valuepanic: invalid character ',' after top-level value我的代码:package mainimport ("fmt"    "net/http"    "io/ioutil"    "encoding/json")type Prices struct {    Data string}func main() {    url := "http://api.bitcoincharts.com/v1/trades.csv?symbol=rockUSD"    httpresp, err := http.Get(url)    if err != nil{        fmt.Println(err)        panic(err)    }    defer httpresp.Body.Close()    htmldata, err := ioutil.ReadAll(httpresp.Body)    if err != nil{        fmt.Println(err)        panic (err)    }    var jsonData []Prices    err = json.Unmarshal([]byte(htmldata), &jsonData)    if err != nil {        fmt.Println(err)        panic (err)    }    fmt.Println(jsonData)}
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

那根本不是 json 数据,您必须编写自定义解析器。


例子:


.........

data := readData(httpresp.Body)

........


func readData(r io.Reader) (out [][3]float64) {

    br := bufio.NewScanner(r)

    for br.Scan() {

        parts := strings.Split(br.Text(), ",")

        if len(parts) != 3 {

            continue

        }

        var fparts [3]float64

        for i, p := range parts {

            // bad idea to ignore errors, but it's left as exercise for the reader.

            fparts[i], _ = strconv.ParseFloat(p, 64)

        }

        out = append(out, fparts)

    }

    return

}


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 316 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信