【问题标题】:Map JSON objects array to strings将 JSON 对象数组映射到字符串
【发布时间】:2018-05-29 17:32:46
【问题描述】:

我正在尝试利用 Google SpreadSheets(Google 脚本)中的地图功能来使用 API 从 Bittrex 获取我的帐户硬币余额。这是我的 JSON 对象:

({success:true,
  message:"",
  result:[
      {Currency:"BTC",
       Balance:0.01,
       Available:0.01,
       Pending:0,
       CryptoAddress:null},
      {Currency:"ETH",     
       Balance:1.0,
       Available:1.0,
       Pending:0,
       CryptoAddress:null}
    ]}
})

理想情况下,我希望根据结果中的键和使用来自每个对象的数据的基础行自动填充标题行。 我看到了 spme 解决方案如何使用每种或更复杂的方式来做到这一点。但我想这可以通过映射来完成。这是我映射顶行的方式,但不知道如何映射值:

var headerRow = Object.keys(json.result[0]);

Google 电子表格中的预期输出为

____________________________________________________________    
| Currency | Balance | Available | Pending | CryptoAddress |
|__________________________________________________________|
| BTC      | 0.01    | 0.01      | 0       | null          | 
| ETH      | 1.0     | 1.0       | 0       | null          |
____________________________________________________________

【问题讨论】:

  • 你有没有尝试过?
  • 你能给我们展示一个你期望输出的例子吗?
  • 如果您尝试访问该值,请尝试 json.result[headerRow[0]] 以获得第一个。

标签: javascript arrays json rest api


【解决方案1】:

您似乎有一个解决方案,但这是另一种方法。

var row = 1;
json.forEach(function(element,index){
   row = ++row;
   Object.keys(json[index]).forEach(function(e,i)
   {
     ++i;
     if(index == 0) { 
       ex.getRange(1, i).setValue(e);
     }
     ex.getRange(row , i).setValue(element[e]);

  });
});

【讨论】:

    【解决方案2】:

    这是完整的示例:

    function getBalances() {
      //Spreadsheet where you store your API key and secret
      var keys = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Keys");
      // Output empty sheet where balances will be written to
      var ex = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Exchanges");
      var nonce = 1995932972127042 + new Date().getTime(); 
    
      var key = keys.getRange("B2").getValue();
      var secret = keys.getRange("C2").getValue();
    
      var baseUrl = 'https://bittrex.com/api/v1.1/';
      var command = "account/getbalances";
      var uri = baseUrl + command + "?apikey=" + key + "&nonce=" + nonce;
    
      var signature = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512,uri,secret);
      signature = signature.map(function(byte) {
        return ('0' + (byte & 0xFF).toString(16)).slice(-2);
      }).join('')
    
      var headers = {
        "apisign": signature
      }
    
      var params = {
        "method": "GET",
        "headers": headers,
      }
    
      var response = UrlFetchApp.fetch(uri, params);  
      var json = JSON.parse(response.getContentText()).result;    
      var balances = json.map(function(coin) {   
        return ["Bittrex",coin["Currency"],coin["Balance"]]; 
      }).filter(function(coin) { if (coin[2] !== 0) return coin; });
    
      var headings = ["Exchange","Currency","Balance"];
      balances.unshift(headings);
      ex.getRange(1, 1, balances.length, balances[0].length).setValues(balances);
    }
    

    【讨论】:

      【解决方案3】:

      我会做以下事情。所以你有密钥,然后你可以检索值。

      Object.keys(json.result[0]).map((val) => { console.log(json.result[0][val])})
      

      将其包装在 foreach 中以对每个结果执行相同操作。

      希望有帮助

      【讨论】:

      • 感谢提示,但 Google Apps 脚本不支持“=>”,所以我不得不花一些时间以其他方式编写它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多