我是Google Scripts编码的新手,我正在尝试了解如何将我收到的数据从JSON格式的文件移动到电子表格中。
我试图提取财务数据,但如果我可以处理下面的简单示例,它将帮助我知道如何编码我遇到的所有其他JSON格式。
我知道基础知识 我可以链接电子表格,我可以使用下面的两个命令解析它 这是我将数据推送到我遇到困难的电子表格之后的步骤。
var responseAPI = UrlFetchApp.fetch(url);
var parcedData = JSON.parse(responseAPI.getContentText());
我猜我会把下面的示例文件放在A列中
B栏中的生存旗帜
C栏中的账单/其他标签。
D栏中的费用说明和E栏中的费用金额。
{"JANUARY": {
"bills":[
["Electric",122.46],
["Credit",155.44],
["Mortgage",440.05]],
"other":[
["Food",188.33],
["Clothes",89.28]],
"Survived":"Y"},
"FEBRUARY":{
"bills":[
["Electric",129.46],
["Credit",155.44],
["Mortgage",440.05],
["Car",298.77],
"other":[
["Food",218.33],
["Clothes",49.28]],
"Survived":"N"},
"MARCH":{
"bills":[
["Electric",119.46],
["Credit",155.44],
["Mortgage",440.05]],
"other":[
["Food",218.33],
["Clothes",49.28],
["Insurance",250.98],
"Survived":"Y"}}
是的,我想要一些关于脚本的帮助,但是,如果你能解释一下你正在做什么以及它是如何工作的,那将是很好的,所以我可以在下次自己完成它。
谢谢!
Colten
答案 0 :(得分:1)
我很想知道如何获得对象的所有属性,因为它们的结构并不那么简单所以我试了一下,不确定我是对的,但它可能是一个很好的起点。 / p>
下面是代码,它的第一部分只是构建一个具有相同结构的对象,第二部分解析它并构建一个直接写入电子表格的数组。
我在测试中只使用了一个月,但这应该不是问题,它应该读取对象中的所有月份。 `` 如果我错了,请随意评论/批评,因为我说这是我的好奇心让我尝试它;)
(这里和那里有很多日志,我用它来检查我的位置......让你自己看看它是怎么回事)
function myFunction() {
var obj = {};
var atr = {}
atr["bills"] = [["Electric",122.46],["Credit",155.44],["Mortgage",440.05]];
atr["other"] = [["Food",188.33],["Clothes",89.28]];
atr["Survived"] = "Y";
obj["JANUARY"] = atr;
Logger.log("obj = "+JSON.stringify(obj)) ;
var ssData = [];
var keys = Object.keys(obj);
Logger.log("keys = "+JSON.stringify(keys));
for (var k in keys ) {
var atr = Object.keys(obj[keys[k]]);
Logger.log("atr of keys = "+JSON.stringify(atr));
var row = [];
row.push(keys[k]); // the month in first column
for(var a in atr){
Logger.log("atr[a] = "+atr[a]);// that's the key (bills, survived...)
var val = obj[keys[k]];// that ais the value of each key
Logger.log("val[atr[a]] = "+JSON.stringify(val[atr[a]]));
row.push(atr[a]+" = "+val[atr[a]]);// the values are written in each cell withe their keys
}
ssData.push(row);// each row is pushed in the final array
}
SpreadsheetApp.getActiveSheet().getRange(1,1,ssData.length, ssData[0].length).setValues(ssData);
}
答案 1 :(得分:1)
这接近我想做的事情,或接近我能得到的。我使用了我想从这个例子中提取的实际JSON文件。我不知道如何绕过密钥的硬编码。我将不得不继续研究。我还想在工作表中一直附加其他货币值,或者自动为每个货币创建新工作表。这是一个开始。
// Pull data and populate screadsheet
function pullJSON() {
var ss = SpreadsheetApp.openById('Your Spreadsheet ID Here')
var sheets = ss.getSheets();
var sheet = ss.getActiveSheet();
// Clear Columns A through E
sheet.getRange('A2:E20000').clearContent();
var url="https://poloniex.com/public?command=returnOrderBook¤cyPair=ALL";
var response = UrlFetchApp.fetch(url); // get feed
var json = JSON.parse(response.getContentText()); //
var currency = "BTC_XMR";
var asks = [];
var bids = [];
asks.push(['askRate', 'askAmount']);
bids.push(['bidRate', 'bidAmount']);
for(var key in json.BTC_XMR.asks)
{
asks.push(json.BTX_XMR.asks[key]);
bids.push(json.BTC_XMR.bids[key]);
}
askRange = sheet.getRange(1, 2, asks.length, 2);
askRange.setValues(asks);
bidRange = sheet.getRange(1, 4, bids.length, 2);
bidRange.setValues(bids);
currencyRange = sheet.getRange(1, 1, asks.length, 1);
currencyRange.setValue(currency);
}