2017-01-16 3 views
0

У меня возникла небольшая проблема с моим скриптом.скрипт google apps json parse error

Я пытаюсь получить json-url и получить данные из 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); 

} 

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

Спасибо заранее!

+0

примечание: Sheet3 importData функция url имеет .csv завершение –

+0

Вы отлаживали скрипт? Может быть, это ошибка по той же причине, что встроенные ошибки (нет данных или подобных) –

+0

не может найти с собой ничего плохого ... данные доступны. пример, когда встроенная функция возвращает # N/A, тогда я просто загружаю ее вручную с одного и того же URL-адреса, и данные отлично подходят. –

ответ

0

Если вы добавили следующую строку кода где-нибудь после того, как вы объявили 'var dataset =' Logger.log ('dataset.length =' + dataset.length);

запуск и проверка Logger.log показывает, что длина dataset.length не определена. (вывод JSON.parse - это объект, и поэтому набор данных является объектом, а не массивом).

Таким образом, для дальнейшего выполнения сценария цикл for будет работать с нулевым временем, так как длина не определена.

поэтому ваш вывод строки остается пустым массивом [] и, следовательно, ваше сообщение об ошибке (я полагаю, но я не могу быть уверен, что это единственная причина).

BTW, вы неправильно указали длину. Но это не дает ошибки, поскольку цикл пропускается (опять же, я полагаю).

Следующий сценарий дает результат в соответствии с листом 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); 
} 
+0

Эй, Дэвид, спасибо, я заметил слово «длина» и исправил его. Ваш код работает как шарм! Большое спасибо. Теперь я вижу, что я сделал неправильно, так что узнал что-то в этом процессе. –

Смежные вопросы