Как получить и проанализировать данные JSON в Google Sheets Script? - PullRequest
2 голосов
/ 14 июня 2019

РЕДАКТИРОВАТЬ *** Изменен вопрос теперь, когда у меня есть правильный источник ...

Я пытаюсь скопировать журнал сообщений в Google Sheets и не знаю достаточно о сценариях (или JSON в этом отношении), чтобы осуществить это. Я просто хочу, чтобы электронная таблица эмулировала / копировала весь доступный журнал.

Сценарий запущен, ошибок нет, но в таблицу ничего не попадает. Фрагмент кода, который я пытаюсь использовать, находится здесь:

function pullJSON() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var sheet = ss.getActiveSheet();


var url="https://api.brandmeister.network/v1.0/repeater/?action=get&q=1148311"; // Paste your JSON URL here

var response = UrlFetchApp.fetch(url); // get feed
var dataAll = JSON.parse(response.getContentText()); //
var dataSet = dataAll;


var rows = [],
  data;


for (i = 0; i < dataSet.length; i++) {
data = dataSet[i];
rows.push([data.repeaterid, data.callsign]); //your JSON entities here
}

 data = sheet.getRange(1,1,99,10).getValues(); 
 sheet.getRange(1,1,99,10).setValues(data);

}

Я хотел бы знать, как это сделать, а также разъяснить, что это за ошибка и почему я ее получаю, я пытаюсь научиться не просто получить помощь.

Электронная таблица - это чистый холст, поэтому, если мне нужно сделать что-то особенное для работы скрипта, можно ли это объяснить? Спасибо всем.

1 Ответ

2 голосов
/ 15 июня 2019
  • Вы хотите узнать причину о The script run and there are no errors, but nothing goes onto the spreadsheet..
  • . Из вашего скрипта вы хотите поместить значения repeaterid и callsign из выбранных данных из URL-адреса https://api.brandmeister.network/v1.0/repeater/?action=get&q=1148311.

Если мое понимание верно, как насчет этого ответа?

Ответ 1:

В этом разделе объясняется причина, по которой The script run and there are no errors, but nothing goes onto the spreadsheet..

Когда я вижу ваш сценарий, в нижней части вашего сценария отображается следующий сценарий.

data = sheet.getRange(1,1,99,10).getValues();
sheet.getRange(1,1,99,10).setValues(data);

Это означает, что данные, полученные с помощью getRange(1,1,99,10), имеют тот же диапазон.А именно, диапазон перезаписывается теми же значениями.Начиная с The spreadsheet is a blank canvas вашего вопроса, пустые значения диапазона помещаются в тот же диапазон.И в скрипте другой части не возникает ошибок.Это причина The script run and there are no errors, but nothing goes onto the spreadsheet..

А также, в вашем скрипте rows не используется.Таким образом, даже если rows имеет значения, которые вы хотите поместить, значения не помещаются в электронную таблицу.

Ответ 2:

В этом разделе я изменил ваш сценарий, чтобы поместить значенияrepeaterid и callsign из выбранных данных с URL-адреса https://api.brandmeister.network/v1.0/repeater/?action=get&q=1148311.

Когда значения, полученные с URL-адреса https://api.brandmeister.network/v1.0/repeater/?action=get&q=1148311, выглядят следующим образом.

{
  "repeaterid": "1148311",
  "callsign": "KD8YYA",
  "hardware": "Android:BlueDV",
  "firmware": "1.0.121-DVMEGA_HR3.07",
  "tx": "437.0000",
  "rx": "437.0000",
  "colorcode": "1",
  "status": "4",
  "lastKnownMaster": "3108",
  "lat": "0.000000",
  "lng": "0.000000",
  "city": "Somewhere",
  "website": "www.pa7lim.nl",
  "pep": null,
  "gain": null,
  "agl": "1",
  "priorityDescription": null,
  "description": null,
  "last_updated": "2019-06-14 15:46:09",
  "sysops": []
}

Из вашего сценария rows.push([data.repeaterid, data.callsign]) я мог понять, что вы можете получить значения repeaterid и callsign и поместить их в электронную таблицу.Чтобы получить их, пожалуйста, измените ваш скрипт следующим образом.

Модифицированный скрипт 1:

function pullJSON() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var sheet = ss.getActiveSheet();
  var url="https://api.brandmeister.network/v1.0/repeater/?action=get&q=1148311"; // Paste your JSON URL here
  var response = UrlFetchApp.fetch(url); // get feed
  var dataAll = JSON.parse(response.getContentText());

  // I modified below.
  var row = [dataAll.repeaterid, dataAll.callsign]; // Retrieve values from JSON object of dataAll.
  sheet.appendRow(row); // Append the values to Spreadsheet.
}
  • С помощью этого модифицированного скрипта получено repeaterid и callsignпомещаются на активный лист электронной таблицы.

Модифицированный скрипт 2:

function pullJSON() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var sheet = ss.getActiveSheet();
  var url="https://api.brandmeister.network/v1.0/repeater/?action=get&q=1148311"; // Paste your JSON URL here
  var response = UrlFetchApp.fetch(url); // get feed
  var dataAll = JSON.parse(response.getContentText());

  // I modified below.
  var rows = [Object.keys(dataAll)]; // Retrieve headers.
  var temp = [];
  for (var i = 0; i < rows[0].length; i++) {
    temp.push(dataAll[rows[0][i]]); // Retrieve values.
  }
  rows.push(temp);
  sheet.getRange(1,1,rows.length,rows[0].length).setValues(rows); // Put values to Spreadsheet.
}
  • С помощью этого модифицированного скрипта все ключи и значения помещаются в электронную таблицу.

Примечание:

  • В этом случае dataAll не является массивом.Итак, ваш скрипт ниже, цикл for не работает.Таким образом, rows становится [].

    var dataSet = dataAll;
    var rows = [], data;
    for (i = 0; i < dataSet.length; i++) {
      data = dataSet[i];
      rows.push([data.repeaterid, data.callsign]); //your JSON entities here
    }
    
  • Из вашего вопроса, я не уверен насчет ситуации, когда вы хотите, чтобы значения помещались в электронную таблицу.Если вы хотите изменить формат вывода, измените приведенный выше скрипт.

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужноПрошу прощения.

...