【问题标题】:google apps script json parse error谷歌应用程序脚本 json 解析错误
【发布时间】:2017-01-16 11:06:47
【问题描述】:

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

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

代码中一定有错误?你们能帮帮我吗?我得到的错误是:

范围的坐标或尺寸无效。 (第 25 行,文件 “代码”)

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

在 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]}

提前致谢!

【问题讨论】:

  • 注意:Sheet3 importData 函数 url 有一个 .csv 结尾
  • 你调试脚本了吗?也许它错误的原因与内置错误的原因相同(没有数据或类似的)
  • 找不到任何问题...数据可用。例如,当内置函数返回 #N/A 时,我只需从同一个 url 手动下载它,数据就很好了。

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


【解决方案1】:

如果您在声明 'var dataset =' 后在某处添加以下代码行 Logger.log('dataset.length=' + dataset.length);

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

因此,在您的脚本中,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);
}

【讨论】:

  • 嘿大卫,谢谢我也注意到了“长度”这个词并更正了它。你的代码就像一个魅力!非常感谢你。我现在也看到了我做错了什么,所以在这个过程中学到了一些东西。
猜你喜欢
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 2013-09-06
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多