如何用JavaScript解析BingX WebSocket返回的Blob格式K线数据?
解决BingX WebSocket Blob响应读取K线数据的问题
当WebSocket返回Blob格式的数据时,你需要先将Blob转换为字符串,再解析成JSON格式才能提取K线数据。以下是修改后的代码和步骤说明:
修改后的代码
var ws = new WebSocket('wss://open-ws-swap.bingbon.pro/ws'); ws.onopen = (event) => { const msg = { id: "548", reqType:"sub", dataType: "market.kline.BTC-USDT.1min", } ws.send(JSON.stringify(msg)); console.log('connection stablished!') } // 处理消息 ws.onmessage = function(event) { // 判断是否为Blob类型 if (event.data instanceof Blob) { const reader = new FileReader(); // 读取Blob为文本 reader.readAsText(event.data); reader.onload = function() { try { // 解析JSON const data = JSON.parse(reader.result); // 提取K线数据 if (data.dataType === 'market.kline.BTC-USDT.1min') { const candlestickData = data.data; console.log('K线数据:', candlestickData); // 按需处理单根K线数据,格式一般为[时间戳, 开盘价, 最高价, 最低价, 收盘价, 成交量] candlestickData.forEach(kline => { console.log( '时间戳:', kline[0], '开盘价:', kline[1], '最高价:', kline[2], '最低价:', kline[3], '收盘价:', kline[4], '成交量:', kline[5] ); }); } } catch (error) { console.error('解析数据失败:', error); } }; reader.onerror = function(error) { console.error('读取Blob失败:', error); }; } else { // 非Blob格式直接尝试解析 try { const data = JSON.parse(event.data); console.log('K线数据:', data.data); } catch (error) { console.error('解析数据失败:', error); } } } ws.onclose = function(event) { console.log(event) }; ws.onerror = function(error) { console.log(error); };
关键步骤说明
- 识别Blob类型:通过
instanceof Blob判断返回数据类型,针对性处理Blob格式。 - 转换Blob为文本:用
FileReader.readAsText()将Blob转成UTF-8字符串,因为BingX的WebSocket响应本质是JSON文本,只是以Blob形式传输。 - 解析JSON提取K线:将字符串解析为JSON对象后,根据API返回结构从
data字段获取K线数组,数组内每一项对应一根K线的具体数据。 - 错误防护:添加try-catch和读取错误监听,避免解析或读取失败导致程序异常。
内容的提问来源于stack exchange,提问作者MohsenCreative
相关产品推荐
相关产品推荐

