3 回答
TA貢獻1877條經驗 獲得超1個贊
由于 JSON 響應是一個數組,因此需要將其取消編組為結構切片。確保還使用正確的 Go 類型。用于 JSON 編號。float64
type Trade struct {
TradeID float64 `json:"id"`
Price string `json:"price"`
Qty string `json:"qty"`
QuoteQty string `json:"quoteQty"`
Time float64 `json:"time"`
IsBuyerMaker bool `json:"isBuyerMaker"`
IsBestMatch bool `json:"isBestMatch"`
}
func main() {
symbol := "ETHEUR"
limit := 1000
uri := fmt.Sprintf("https://api.binance.com/api/v3/trades?symbol=%v&limit=%v", symbol, limit)
response, err := http.Get(uri)
if err != nil {
fmt.Println(err)
}
body, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
defer response.Body.Close()
trade := []Trade{}
err = json.Unmarshal([]byte(body), &trade)
if err != nil {
fmt.Println(err)
}
fmt.Println(trade)
}
TA貢獻1840條經驗 獲得超5個贊
如果我們有一個json樣本(模擬),以了解由于json是否存在確切的問題,可能會有所幫助。
我懷疑,因為你有一個你之前提到的結構的ARRAY,你應該在a上做一個unmarshal,而不是一個Final for json類型,有一種規則集,當你做一個unmarshal時,但只有當你的字段ar類型:[]Trade{}Trade{}interface{}

TA貢獻1829條經驗 獲得超6個贊
如果你正在獲取json數組,我假設它們是json對象的數組,每個對象都包含你定義的結構的json。如下面的示例所示。
[
{
"id": 1,
"price": "111",
"qty": "20",
"quoteQty": "100",
"time": 6039484,
"isBuyerMaker": true,
"isBestMatch": false
},
{
"id": 2,
"price": "222",
"qty": "20",
"quoteQty": "100",
"time": 6039484,
"isBuyerMaker": true,
"isBestMatch": false
},
{
"id": 3,
"price": "333",
"qty": "20",
"quoteQty": "100",
"time": 6039484,
"isBuyerMaker": true,
"isBestMatch": false
}
]如果你正在獲取json數組,我假設它們是json對象的數組,每個對象都包含你定義的結構的json。如下面的示例所示。
[
{
"id": 1,
"price": "111",
"qty": "20",
"quoteQty": "100",
"time": 6039484,
"isBuyerMaker": true,
"isBestMatch": false
},
{
"id": 2,
"price": "222",
"qty": "20",
"quoteQty": "100",
"time": 6039484,
"isBuyerMaker": true,
"isBestMatch": false
},
{
"id": 3,
"price": "333",
"qty": "20",
"quoteQty": "100",
"time": 6039484,
"isBuyerMaker": true,
"isBestMatch": false
}
]
在代碼中,需要執行這些操作。
聲明一個交易結構的切片,
執行此數據到該切片的 json 解編組
循環訪問切片以獲取每個 json 對象上的處理程序。
現在,您可以形成一個 sql 查詢并訪問每個 json 對象的 json 值,并對數據庫進行查詢。
像這樣的東西。
// Assuming r is your default http.Request handler, get the complete request body
byteSlice, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println("Error in reading request body")
}
var trades []Trade
if err = json.Unmarshal(byteSlice, &trades); err != nil {
log.Println("Error in json unmarshal")
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
for _, trade := range trades {
log.Println("Trade ID: ", trade.TradeID)
// Call a function and pass each trade object
err := triggerSQLQuery(trade)
if err != nil {
log.Println(err.Error())
}
}
func triggerSQLQuery(trade Trade) error {
// Access trade object and form an sql query and execute it.
}
- 3 回答
- 0 關注
- 197 瀏覽
添加回答
舉報
