Google apps скрипт JSON parse ошибка

Я столкнулся с небольшой проблемой с моим сценарием.

Я пытаюсь получить url-адрес json и получить данные из файла json в электронную таблицу google. Ранее я использовал функцию =importData () в электронной таблице. Однако я заметил, что функция иногда ненадежна и возвращает #N / A. Я хочу создать сценарий, который я могу запланировать для запуска, когда я хочу.

Где-то в коде должна быть ошибка? Вы можете мне помочь? Ошибка, которую я получаю:

Координаты или размеры диапазона недопустимы. (строка 25, файл
«Код»)

Вот ссылка на файл электронной таблицы google:
https://docs.google.com/spreadsheets/d/15xQy8GDyHRMZXBPcnmSLYUl6GSHZLpTkfhvYR7-BjvQ/edit?usp=sharing

На листе 3 приведен пример того, как выглядит функция =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);

}

Лесоруб.выход журнала

[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 ответ

  1. Если добавить следующую строку кода после объявления ‘ var dataset =’
    Лесоруб.log (‘dataset.length= ‘ + dataset.длина);

    запуск и проверка Лесопогрузчика.журнал показывает, что набор данных.длина не определена. (выходные данные 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);
    }