Home > database >  ColdFusion : Get Array from Inside Structure - Binance API Result
ColdFusion : Get Array from Inside Structure - Binance API Result

Time:02-25

Horray - got the ColdFusion to Binance API working.

Binance API Result has an Array Inside the JSON Structure.

Trying to pull the Fills data. But not having best luck.

 <cfset result = '{"symbol":"SHIBUSDT","orderId":1158141049,"orderListId":-1,"clientOrderId":"tAMnbc6XLKEMNFENUdbNvD","transactTime":1645634941287,"price":"0.00000000","origQty":"784913.00","executedQty":"784913.00","cummulativeQuoteQty":"20.72170320","status":"FILLED","timeInForce":"GTC","type":"MARKET","side":"SELL","fills":[{"price":"0.00002640","qty":"784913.00","commission":"0.02072170","commissionAsset":"USDT","tradeId":291444301}]}'>

The array I need starts at the fills with the structure inside it:

  ,"fills":[{"price":"0.00002640","qty":"784913.00","commission":"0.02072170","commissionAsset":"USDT","tradeId":291444301}]

Starting with this as easy display of the JSON result to easily get the symbol, side, etc...

 <cfscript>
   record = deserializeJSON(#result#);
   writeOutput( "<br>SYMBOL:"& record.symbol); 
   writeOutput( "<br>SIDE:"& record.side);   
 </cfscript>

Kinda trying this to get the Fills Array Data but no luck...

 <cfoutput>
 <cfset arrayOfStructs = deserializeJson(result[fills])>
 <cfloop array="#arrayOfStructs#" index="retdata">
       <cfset Price = retdata.price />
       <cfset QTY = retdata.qty />
       #price#
          <br>#qty#
 </cfloop>
 </cfoutput>

Should be an easy thing. Perhaps my brain is burned from all the API fights I've had.

CodePudding user response:

Yeah, wrestling with some API's can short out a few brain fuses at times, but it's good experience for the next tricky one.

record = deserializeJSON(#result#); .. deserializeJson(result[fills])>

Anyway, you're very close. No need to deserialize a second time. Just use the existing record variable. result[fills] is already a CF array, which you can loop through

<cfscript>
  result = '{"symbol":"SHIBUSDT",....}'; 

  record = deserializeJSON(result);
  writeOutput( "<br>SYMBOL:"& record.symbol); 
  writeOutput( "<br>SIDE:"& record.side);     

  for (fill in record.fills) {
    price = fill.price;
    qty = fill.qty;
    
    writeOutput("<br>price="& price &" qty="& qty);
  }
  
</cfscript>

CodePudding user response:

I was able to sort out. Thx for answers. I'll look at that code as well.

Simple CFHTTP POST to the Binance API - for Trades (Buy/Sell)

 <cfhttp url="#base_api##req_path#" method="POST" result="result" charset="utf-8">
 <cfhttpparam type="header" name="X-MBX-APIKEY" value="#bn_key#"> 
 <cfhttpparam type="body" value="#thebody#">
 </cfhttp> 

 <cfset result = #result.filecontent#>

 <cfscript>
   record = deserializeJSON(#result#);

   need = record.fills;

   writeOutput("SYMBOL:"& record.symbol); 
   writeOutput("<br>SIDE:"& record.side);  

   // writeDump(need);
   // writeDump(record);

 </cfscript>

This gets the needed array [need] which has the actual buy/sell data. Then just loop it.

 <cfoutput>
 <cfloop array="#need#" index="retdata">
       <cfset Price = retdata.price />
       <cfset QTY = retdata.qty />
      PRICE : #price#
    <br>Quantity : #qty#
 </cfloop>
 </cfoutput>
  • Related