解析Google脚本中的JSON返回数据

时间:2016-11-04 11:00:40

标签: google-apps-script google-sheets

我是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

2 个答案:

答案 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&currencyPair=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);

}