Сопоставить массив объектов JSON со строками

1

Я пытаюсь использовать функцию карты в Google SpreadSheets (Google Script), чтобы получить мои балансы монет из Bittrex с использованием API. Вот мой объект 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}
    ]}
})

В идеале я хотел бы заполнить строку заголовка автоматически, основываясь на Keys в результатах и ​​базовых строках, используя данные из каждого объекта. Я видел spme-решения, как это сделать для каждого или более сложного способа. Но я предполагаю, что это можно сделать путем простого сопоставления. Вот как я сопоставил верхнюю строку, но не знаю, как сопоставить значения:

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

Ожидаемый результат в Google SpreadSheet

____________________________________________________________    
| Currency | Balance | Available | Pending | CryptoAddress |
|__________________________________________________________|
| BTC      | 0.01    | 0.01      | 0       | null          | 
| ETH      | 1.0     | 1.0       | 0       | null          |
____________________________________________________________
  • 1
    Вы пробовали что-нибудь?
  • 0
    Можете ли вы показать нам пример того, как вы ожидаете, что результат будет выглядеть?
Показать ещё 1 комментарий
Теги:
arrays
rest

3 ответа

1

Я бы сделал следующее. Таким образом, у вас есть ключ, а затем вы можете получить значение.

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

Оберните, что внутри foreach, чтобы сделать то же самое для каждого результата.

Надеюсь, что поможет

  • 0
    Спасибо за совет, но Google Apps Script не поддерживает "=>", поэтому мне пришлось потратить некоторое время, чтобы написать его по-другому.
0

Кажется, у вас есть решение, но вот еще один способ.

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]);

  });
});
0

Вот полный рабочий пример:

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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню