我试图用 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
很好地解码,并且您不需要取消引用它来索引切片。
- 1 回答
- 0 关注
- 209 浏览
添加回答
举报
0/150
提交
取消