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 关注
- 126 浏览
添加回答
举报