【问题标题】:Fetch Nested JSON data in Go [closed]在 Go 中获取嵌套的 JSON 数据 [关闭]
【发布时间】:2021-09-05 06:48:24
【问题描述】:

我一直遇到同样的问题,即从嵌套的 JSON 中获取数据。

结构看起来是这样的,下面是我对解决方案的尝试。

我收到的错误是“response.Result.Bid undefined”我已经解码了 JSON 响应,所以我不太明白这里发生了什么。当我尝试追加到数组时发生错误。

我将不胜感激,如果你们有任何与此主题相关的好资源,我可以阅读有关 lmk 的信息,因为我一直遇到同样的问题。我不是编程背景,我是一名数学家。

type MarketPrices struct {
    Success bool `json:"success"`
    Result  []struct {
        Name           string      `json:"name"`
        Basecurrency   interface{} `json:"baseCurrency"`
        Quotecurrency  interface{} `json:"quoteCurrency"`
        Type           string      `json:"type"`
        Underlying     string      `json:"underlying"`
        Enabled        bool        `json:"enabled"`
        Ask            float64     `json:"ask"`
        Bid            float64     `json:"bid"`
        Last           float64     `json:"last"`
        Postonly       bool        `json:"postOnly"`
        Priceincrement float64     `json:"priceIncrement"`
        Sizeincrement  float64     `json:"sizeIncrement"`
        Restricted     bool        `json:"restricted"`
    } `json:"result"`
}
func Spot_Price() []float64 {
    res, err := http.Get("https://ftx.com/api/markets/BTC/USD")
    if err != nil {
        log.Fatal(err)
    }

    var arr []float64

    var response MarketPrices
    json.NewDecoder(res.Body).Decode(&response)

    arr = append(arr, response.Result.Bid)

    arr = append(arr, response.Result.Ask)

    return arr
}

【问题讨论】:

  • Result是一个数组:response.Result[0].Bid会给你第一个结果的Bid,你可以for _,result:=range response.Result {...}扫描所有结果。
  • @BurakSerdar 非常感谢!!

标签: json go struct


【解决方案1】:

对于问题 [1] 中的实际响应,不返回任何切片。这将是一个 更好的响应建模:

package main

import (
   "encoding/json"
   "fmt"
   "net/http"
)

type MarketPrices struct {
   Success bool
   Result struct {
      Ask, Bid, Last, Priceincrement, Sizeincrement  float64
      Basecurrency, Name, Quotecurrency, Type, Underlying     string
      Enabled, Postonly, Restricted     bool
   }
}

func request() (*MarketPrices, error) {
   res, err := http.Get("https://ftx.com/api/markets/BTC/USD")
   if err != nil { return nil, err }
   defer res.Body.Close()
   response := new(MarketPrices)
   json.NewDecoder(res.Body).Decode(response)
   return response, nil
}

func main() {
   price, err := request()
   if err != nil {
      panic(err)
   }
   fmt.Printf("%+v\n", price)
}
  1. https://ftx.com/api/markets/BTC/USD

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2016-10-21
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多