谷歌应用程序脚本json解析错误

时间:2017-01-16 11:06:47

标签: json google-apps-script google-sheets

我的脚本遇到了一个小问题。

我尝试获取json网址并将json文件中的数据导入google电子表格。以前我在电子表格中使用了= importData()函数。但是,我注意到该函数有时不可靠并返回#N / A.我想创建一个脚本,我可以安排在我想要的时候运行。

代码中某处肯定有错误?你们能帮助我吗?我得到的错误是:

  

范围的坐标或尺寸无效。 (第25行,档案   "代码&#34)

这是指向Google电子表格文件的链接: https://docs.google.com/spreadsheets/d/15xQy8GDyHRMZXBPcnmSLYUl6GSHZLpTkfhvYR7-BjvQ/edit?usp=sharing

On Sheet3是使用= importData()函数的示例。而且我希望这个自定义脚本看起来像。

function FetchUrl() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()

  var url = sheet[0].getRange(1, 2).getValue();
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var dataAll = JSON.parse(json);
  Logger.log(dataAll);
  var dataset = dataAll;

  var rows = [],
      data;

  for (i = 0; i < dataset.lenght; i++){
    data = dataset[i];
    rows.push([data.title, data.fields, data.values]);
  }
  dataRange = sheet[1].getRange(2, 1, rows.length, 3);
  dataRange.setValues(rows);

}
  

Logger.log输出

[17-01-16 02:34:38:354 PST] {types=[1082, 20, 20, 20, 20, 20, 20, 20], type_names=[unknown, integer, integer, integer, integer, integer, integer, integer], values=[[2017-01-15, 3, 1, 3, 0, 2, 0, 0]], title=Course's all topics' starts yesterday: Get that job (en, -NG), fields=[date, findyourdreamjob, bethebestjobseeker, writethebestcv, findthebestjobs, getajobinterview, excelatjobinterviews, firstdaysonthejob]}

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果在声明&#39; var dataset =&#39;之后在某处添加以下代码行? Logger.log(&#39; dataset.length =&#39; + dataset.length);

运行并检查Logger.log显示dataset.length未定义。 (JSON.parse的输出是一个对象,因此数据集是一个对象,而不是一个数组)

因此,对于你的脚本,for循环将运行零次,因为长度未定义。

所以你的行输出仍然是空数组[],因此你的错误信息(我想,但我不能确定这是唯一的原因)。

是的,你的拼写长度不正确。但是这不会产生错误,因为跳过循环(我想再次)。

以下脚本根据表3给出结果,供您进行比较。

function FetchUrl2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()

  var url = sheet[0].getRange(1, 2).getValue();
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var dataAll = JSON.parse(json);
  Logger.log(dataAll);  // inspecting through Logger.log shows dataAll is an object not an array.  So, in the lines below, the headers and values are extracted from this object and recreated into an array.

  var headers = dataAll.fields; 
  var values = dataAll.values[0]; 
  var output = [headers,values];
  Logger.log(output)
  var dataRange = sheet[1].getRange(2,1,output.length, output[0].length);
  dataRange.setValues(output);
}