Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 切换到websocket后如何从Binance解析数据_Javascript_Google Apps Script_Google Sheets_Websocket_Binance - Fatal编程技术网

Javascript 切换到websocket后如何从Binance解析数据

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

现在我终于切换到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.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
它是干什么的?
  • 我从示例数据创建了一个JSON对象,使用JSON.stringify()将其转换为字符串,然后使用JSON.parse()将其转换回JSON对象
  • 我将
    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);
      }
    
    }