You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:54:04