Я пытаюсь использовать функцию карты в 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 |
____________________________________________________________
Я бы сделал следующее. Таким образом, у вас есть ключ, а затем вы можете получить значение.
Object.keys(json.result[0]).map((val) => { console.log(json.result[0][val])})
Оберните, что внутри foreach, чтобы сделать то же самое для каждого результата.
Надеюсь, что поможет
Кажется, у вас есть решение, но вот еще один способ.
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]);
});
});
Вот полный рабочий пример:
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);
}