Go语言如何将请求获取的JSON转struct并拆分bids、asks数组
Go 解析JSON并提取bids、asks数组操作步骤
首先修正你给出的JSON的小语法错误(第一个bids元素缺外层左中括号、多余无效逗号),匹配交易所深度接口标准返回结构的实现方案如下:
1. 定义对应结构体
type DepthResponse struct { LastUpdateId int64 `json:"lastUpdateId"` Bids [][]string `json:"bids"` Asks [][]string `json:"asks"` }
- 结构体字段首字母必须大写,JSON标签要和接口返回的key完全匹配
- Bids、Asks定义为二维字符串数组,和JSON嵌套数组结构完全对应
2. 完整解析代码示例
你已经通过ioutil.ReadAll拿到了响应字节数组b,后续解析逻辑如下:
import ( "encoding/json" "io/ioutil" "net/http" "strconv" ) // 接口请求逻辑省略,假设已拿到响应对象resp b, err := ioutil.ReadAll(resp.Body) if err != nil { // 自定义处理读响应错误逻辑 panic(err) } defer resp.Body.Close() // 初始化结构体实例 var depth DepthResponse // 反序列化JSON到结构体 err = json.Unmarshal(b, &depth) if err != nil { // 自定义处理JSON解析错误逻辑 panic(err) } // 直接提取独立的bids和asks数组 bids := depth.Bids asks := depth.Asks // 后续业务使用示例:取买一卖一数据转数值做计算 if len(bids) > 0 { bid1Price, _ := strconv.ParseFloat(bids[0][0], 64) bid1Amount, _ := strconv.ParseFloat(bids[0][1], 64) } if len(asks) > 0 { ask1Price, _ := strconv.ParseFloat(asks[0][0], 64) ask1Amount, _ := strconv.ParseFloat(asks[0][1], 64) }
注意事项
- Go 1.16及以上版本
ioutil.ReadAll已被弃用,可直接替换为io.ReadAll,用法完全一致 - 数值转换时建议自行处理
strconv.ParseFloat返回的错误,避免非法字符串导致程序异常
内容的提问来源于stack exchange,提问作者Guy
相关产品推荐
相关产品推荐

