2 回答

TA貢獻1826條經驗 獲得超6個贊
你不能強制轉換[]interface{}為Binance_klines. 所以kline = (to_parse).(Binance_klines)失敗了。你必須自己寫翻譯。
返回的數據是一個二維數組。這是您格式化的 json 負載。string類型是和的混合float64,因此 Go 使用它interface{}來存儲值。
[
[
1664277480000,
"20980.42000000",
"20984.06000000",
"20966.57000000",
"20970.14000000",
"6.10441000",
1664277539999,
"128041.93403330",
142,
"2.97844000",
"62486.29173860",
"0"
],
[
1664277540000,
"20969.14000000",
"20976.08000000",
"20955.69000000",
"20970.15000000",
"3.17365000",
1664277599999,
"66548.64583140",
88,
"2.39827000",
"50292.47196580",
"0"
],
[
1664277600000,
"20970.15000000",
"20970.15000000",
"20970.15000000",
"20970.15000000",
"0.00000000",
1664277659999,
"0.00000000",
0,
"0.00000000",
"0.00000000",
"0"
]
]
json 解碼器無法將其轉換為您的Binance_klines結構。但是您可以自己覆蓋默認的解組行為。
首先,我為有時引用的數字制作了一個類型,有時不引用。
type BinanceNumber string
func (b *BinanceNumber) UnmarshalJSON(data []byte) error {
*b = BinanceNumber(strings.Trim(string(data), "\""))
return nil
}
func (b BinanceNumber) Float64() float64 {
f, err := strconv.ParseFloat(string(b), 64)
if err != nil {
panic(err)
}
return f
}
func (b BinanceNumber) Int64() int64 {
i, err := strconv.ParseInt(string(b), 10, 64)
if err != nil {
panic(err)
}
return i
}
然后你覆蓋Binance_klines解組。
func (b *Binance_klines) UnmarshalJSON(data []byte) error {
var array []BinanceNumber
err := json.Unmarshal(data, &array)
if err != nil {
return err
}
b.OpenTime = array[0].Int64()
b.Open = float32(array[1].Float64())
b.High = float32(array[2].Float64())
b.Low = float32(array[3].Float64())
b.Close = float32(array[4].Float64())
b.Volume = float32(array[5].Float64())
b.CloseTime = array[6].Int64()
b.QuoteVolume = float32(array[7].Float64())
b.NumTrades = array[8].Int64()
b.TakerBaseVolume = float32(array[9].Float64())
b.TakerQuoteVolume = float32(array[10].Float64())
return nil
}
將它們放在一起: https: //go.dev/play/p/SGGbWEUFxJr。

TA貢獻1784條經驗 獲得超8個贊
這部分:
var kline Binance_klines
kline = (to_parse).(Binance_klines)
需要成為
var kline Binance_klines
kline.OpenTimer = to_parse[0].(int64)
kline.open = strconv.ParseFloat(to_parse[1].(string), 64)
...
您沒有收到您的Binance_klines結構的 json 表示形式,而是任何部分(混合或數字和字符串)。
- 2 回答
- 0 關注
- 153 瀏覽
添加回答
舉報