Javascript 切换到websocket后如何从Binance解析数据
现在我终于切换到Binance中的websocket,我不能再像以前那样解析响应中的数据了。我正在使用Javascript和googleapps脚本Javascript 切换到websocket后如何从Binance解析数据,javascript,google-apps-script,google-sheets,websocket,binance,Javascript,Google Apps Script,Google Sheets,Websocket,Binance,现在我终于切换到Binance中的websocket,我不能再像以前那样解析响应中的数据了。我正在使用Javascript和googleapps脚本 function balanceBinance(){ var键=“”; var secret=''; var curTime=Number(new Date().getTime()).toFixed(0); var string=“type=SPOT×tamp=“+curTime; var sKey=Utilities.computeHm
function balanceBinance(){
var键=“”;
var secret='';
var curTime=Number(new Date().getTime()).toFixed(0);
var string=“type=SPOT×tamp=“+curTime;
var sKey=Utilities.computeHmacSha256Signature(字符串,secret);
sKey=sKey.map(函数(e){
VarV=(e<0?e+256:e).toString(16);
返回v.length==1?“0”+v:v;
}).加入(“”);
变量参数={
'type':'SPOT',
'方法':'获取',
'headers':{'X-MBX-APIKEY':key},
“muteHttpExceptions”:true
};
变量url=”https://api.binance.com/sapi/v1/accountSnapshot?“+string+”&signature=“+sKey;
var data=UrlFetchApp.fetch(url,参数);
var data=JSON.parse(data.getContentText());
var data=data.snapshotVos;
Logger.log(数据);
}
它返回:
[{data={totalAssetOfBtc=0.0000117, balances=[{free=0.0000117, asset=BNB, locked=0}, {asset=BTC, locked=0, free=0.00000093}, {free=0.00026, asset=BTCDOWN, locked=0}, {locked=0, free=0.00, asset=EUR}, {asset=USDT, locked=0, free=0.06716916}]}, type=spot, updateTime=1.622851199E12}, {updateTime=1.622937599E12, data={totalAssetOfBtc=0.0000117, balances=[{asset=BNB, locked=0, free=0.0000117}, {locked=0, asset=BTC, free=0.00000093}, {locked=0, free=0.00026, asset=BTCDOWN}, {locked=0, free=0.34585555, asset=EUR}, {free=0.06716916, locked=0, asset=USDT}]}, type=spot}, {type=spot, updateTime=1.623023999E12, data={balances=[{locked=0, asset=BNB, free=0.0000117}, {asset=BTC, locked=0, free=0.00000093}, {asset=BTCDOWN, locked=0, free=0.00026}, {free=0.34585555, locked=0, asset=EUR}, {free=411.06716916, locked=0, asset=USDT}], totalAssetOfBtc=0.11298258}}, {updateTime=1.623110399E12, type=spot, data={balances=[{free=0.0000117, locked=0, asset=BNB}, {asset=BTC, locked=0, free=0.00000093}, {locked=0, asset=BTCDOWN, free=0.00026}, {asset=ETHDOWN, free=0.00376, locked=0}, {free=0.34585555, asset=EUR, locked=0}, {free=0.40578148, locked=0, asset=USDT}], totalAssetOfBtc=0.0000117}}, {data={totalAssetOfBtc=0.0000117, balances=[{free=0.0000117, locked=0, asset=BNB}, {free=0.00000093, asset=BTC, locked=0}, {free=0.00026, asset=BTCDOWN, locked=0}, {free=0.00376, asset=ETHDOWN, locked=0}, {free=0.34585555, asset=EUR, locked=0}, {free=0.40578148, locked=0, asset=USDT}]}, type=spot, updateTime=1.623196799E12}]
在以前版本的脚本中,我能够为任何相应的资产提取自由参数,代码如下:
var data = data.filter(function (el) {
return el.free > 0;
});
var i;
for (i=0; i < data.length; i++) {
var asset = data[i].asset;
var free = data[i].free;
if (free < 1) {var a = parseFloat(free); var a = a.toFixed(8); var free = parseFloat(a);}
if (free > 1 && free < 10) {var a = parseFloat(free); var a = a.toFixed(4); var free = parseFloat(a);}
if (free >=10) {var a = parseFloat(free); var a = a.toFixed(2); var free = parseFloat(a);}
var row=rows.indexOf(asset)+2;
if (row>0){
sheet.getRange(row, 13).setValue(free);}
}
var data=data.filter(函数(el){
返回el.free>0;
});
var i;
对于(i=0;i1&&free<10){var a=parseFloat(free);var a=a.toFixed(4);var free=parseFloat(a);}
如果(free>=10){var a=parseFloat(free);var a=a.toFixed(2);var free=parseFloat(a);}
var行=行。indexOf(资产)+2;
如果(行>0){
sheet.getRange(第13行).setValue(自由);}
}
您的JSON结构如下
snapshotVos = [
{ data: { balances: [{asset,free}, {asset,free}] } },
{ data: { balances: [{asset,free}, {asset,free}] } },
{ data: { balances: [{asset,free}, {asset,free}] } } ]
示例代码:
函数parseJson(){
var sampleJson={msg:'',snapshotVos:[{updateTime:1.622851199E12,数据:{TotalAssetToFBTC:0.10958809,余额:[{asset:'BNB',free:0.0000,locked:0},{asset:'BTC',locked:0,free:0.00000093},{asset:'BTCDOWN',free 0.00026,locked:0},{free:2981.34585555,asset:'EUR',locked:0},free:411.067116,asset:'USDT',spot:0},数据类型:{{余额:[资产:'BNB',锁定:0,自由:0.0000117},{资产:'BTC',锁定:0,自由:0.00000093},{资产:'BTCDOWN',锁定:0,自由:0.00026},{锁定:0,自由:2981.34585555,资产:'USDT',自由:411.06716916,锁定:0},{总资产:0.11403012},更新时间:1.622937599E12,类型代码:'200'};
var sampleJsonStr=JSON.stringify(sampleJson);
var data=JSON.parse(sampleJsonStr);
var余额=[]
data.snapshotVos.forEach(snap=>{
balances.push(snap.data.balances);
});
日志(余额);
Logger.log(balances.flat());
var data=balances.flat().filter(函数(el){
返回el.free>0;
});
Logger.log(数据);
对于(i=0;i
它是干什么的?
snapshotVos数组
中的所有data.balances数组
组合成一个balances数组
。我使用array.flat()将二维数组更改为一维数组,然后根据给定条件对其进行筛选data
变量应该已经与for循环匹配getContentText()是必须解析的json(您已将//放在指令前面)@MikeSteelson我不得不发表评论,因为否则它就不起作用了。在questionFilter中编辑的是一个数组方法。最有可能的数据是一个对象。我现在没有时间回答它,但应该有人能够用您现在提供的信息为您提供答案。感谢json…现在我们可以给出一个答案请尽快给出解决方案。如果您仍然遇到一些问题,请告诉我。非常感谢您的回答和帮助。目前情况似乎很好,而且肯定是我自己做不到的事情:让我在一两天内在脚本中测试一下,我会给您回复,以防您的答案正确。同时,我如果我需要额外的解释,希望我可以问你。谢谢,没问题。谢谢。如果我需要深入一点,我只是想问你一件事,暂时出于好奇,那就是:为什么我们需要将数据转换为字符串,然后再转换回Json?一开始的格式不正确吗?谢谢这只是为了从我这边复制:)我向您展示了从字符串json,可以使用json.parse()成功解析它
function parseJson() {
var sampleJson ={msg:'', snapshotVos:[{updateTime:1.622851199E12, data:{totalAssetOfBtc:0.10958809, balances:[{asset:'BNB', free:0.0000, locked:0}, {asset:'BTC', locked:0, free:0.00000093}, {asset:'BTCDOWN', free:0.00026, locked:0}, {free:2981.34585555, asset:'EUR', locked:0}, {free:411.06716916, asset:'USDT', locked:0}]}, type:'spot'}, {data:{balances:[{asset:'BNB', locked:0, free:0.0000117}, {asset:'BTC', locked:0, free:0.00000093}, {asset:'BTCDOWN', locked:0, free:0.00026}, {locked:0, free:2981.34585555, asset:'EUR'}, {asset:'USDT', free:411.06716916, locked:0}], totalAssetOfBtc:0.11403012}, updateTime:1.622937599E12, type:'spot'}], code:200.0};
var sampleJsonStr = JSON.stringify(sampleJson);
var data = JSON.parse(sampleJsonStr);
var balances = []
data.snapshotVos.forEach( snap => {
balances.push(snap.data.balances);
});
Logger.log(balances);
Logger.log(balances.flat());
var data = balances.flat().filter(function (el) {
return el.free > 0;
});
Logger.log(data);
for (i=0; i < data.length; i++) {
var asset = data[i].asset;
var free = data[i].free;
Logger.log("asset: "+asset+" "+"free: "+free);
}
}