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

解组未命名对象的未命名 JSON 数组

解组未命名对象的未命名 JSON 数组

Go
慕桂英4014372 2021-07-26 09:24:25
我试图用 Go 解组的 JSON 是未命名对象的未命名数组:[{    "date": 1394062029,    "price": 654.964,    "amount": 5.61567,    "tid": 31862774,    "price_currency": "USD",    "item": "BTC",    "trade_type": "ask"},{    "date": 1394062029,    "price": 654.964,    "amount": 0.3,    "tid": 31862773,    "price_currency": "USD",    "item": "BTC",    "trade_type": "ask"},{    "date": 1394062028,    "price": 654.964,    "amount": 0.0193335,    "tid": 31862772,    "price_currency": "USD",    "item": "BTC",    "trade_type": "bid"}]我可以成功解组对象并将完整tradesResult数组打印为 %#v,但是当我尝试访问数组元素时,出现以下错误。prog.go:41: invalid operation: tradeResult[0] (index of type *TradesResult)以下是您可以运行以尝试解决问题的示例代码:// You can edit this code!// Click here and start typing.package mainimport (    "fmt"    "io/ioutil"    "net/http"    "encoding/json")type TradesResultData struct {    Date     float64 `json:"date"`    Price    float64 `json:"price"`    Amount   float64 `json:"amount"`    Trade    float64 `json:"tid"`    Currency string  `json:"price_currency"`    Item     string  `json:"item"`    Type     string  `json:"trade_type"`}type TradesResult []TradesResultDatafunc main() {    resp, err := http.Get("https://btc-e.com/api/2/btc_usd/trades")    if err != nil {        fmt.Printf("%s\r\n", err)    }    json_response, err := ioutil.ReadAll(resp.Body)    if err != nil {        fmt.Printf("%s\r\n", err)    }    resp.Body.Close()    fmt.Printf("JSON:\r\n%s\r\n", json_response)    tradeResult := new(TradesResult)    err = json.Unmarshal(json_response, &tradeResult)    if err != nil {        fmt.Printf("%s\r\n", err)    }    // Printing trade result first element Amount    fmt.Printf("Element 0 Amount: %v\r\n", tradeResult[0].Amount)}
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

在这一行:

tradeResult := new(TradesResult)

您正在tradeResult使用*TradeResult类型声明变量。即,指向切片的指针。您收到的错误是因为您不能在指向切片的指针上使用索引表示法。

解决此问题的一种方法是将最后一行更改为使用(*tradeResult)[0].Amount. 或者,您可以声明tradeResult为:

var tradeResult TradeResult

json模块将能够&tradeResult很好地解码,并且您不需要取消引用它来索引切片。


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

添加回答

举报

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