Нужна помощь в заполнении Google Sheets из вложенного JSON - PullRequest
0 голосов
/ 19 декабря 2018

заранее благодарю за любую помощь.

Я пытаюсь перенести данные из моей учетной записи Hubspot в Google Sheet, используя их API-интерфейс аналитики (https://developers.hubspot.com/docs/methods/analytics/get-analytics-data-breakdowns)

Я написалследующий скрипт в Google App Script:

var url = API_URL + "/analytics/v2/reports/totals/summarize/daily?&start=20181201&end=20181219";
var response = UrlFetchApp.fetch(url, headers);
var json = response.getContentText();
var dataALL = JSON.parse(json);
var dataSet = dataALL;

Logger.log(dataALL);

var rows = [],
    data;

for (i = 0; i < dataSet.length; i++) {
  data = dataSet[i];
  rows.push(data.visits, data.leads);
}

Logger.log(rows)

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

dataRange = sheet.getRange(1, 1, rows.length, 2);

dataRange.setValues([rows])

Но когда я пытаюсь Logger.log(rows), он получается пустым.Когда я пытаюсь Logger.log(dataSet.length), он возвращает 0.0

Итак, я понял, что делаю ошибку, получая данные JSON в массив.Я провел тонны исследований, но не смог найти решение, которое подходит для моего конкретного случая.

JSON, который я пытаюсь записать в электронную таблицу, имеет следующий формат:

 {2018-12-03   =   [  
      {  
         contactsPerPageview=0.15384615384615385,
         rawViews=143,
         subscribers=1,
         contactToCustomerRate=0.045454545454545456,
         privacyConsentDeclines=11,
         customersPerPageview=0.006993006993006993,
         sessionToContactRate=0.2037037037037037,
         pageviewsPerSession=1.3240740740740742,
         opportunities=3,
         visits=108,
         visitors=98,
         submissionsPerPageview=0.027972027972027972,
         submissions=4,
         leads=17,
         privacyConsentApproves=9,
         customers=1,
         contacts=22,
         newVisitorSessionRate=0.9074074074074074
      }
   ],

2018-12-14   =   [  
      {  
         contactsPerPageview=0.06722689075630252,
         rawViews=238,
         subscribers=4,
         privacyConsentDeclines=14,
         sessionToContactRate=0.08290155440414508,
         pageviewsPerSession=1.233160621761658,
         opportunities=6,
         visits=193,
         visitors=182,
         submissionsPerPageview=0.029411764705882353,
         submissions=7,
         leads=6,
         privacyConsentApproves=12,
         contacts=16,
         newVisitorSessionRate=0.9430051813471503
      }]}

Ребята, можете ли вы указать мне правильное направление?

Еще раз спасибо,

1 Ответ

0 голосов
/ 19 декабря 2018

Поскольку dataSet является объектом, у него нет свойства .length, и ваш цикл for проверит, меньше ли i, чем Undefined, что приводит к значению false.Это означает, что цикл for никогда не запускается.

Я думаю, что вы пытаетесь достичь, ближе к следующему:

  var dataSet = Object.keys(dataALL);

  Logger.log(dataALL);

  var rows = [], data;

  for (i = 0; i < dataSet.length; i++) {

      data = dataALL[dataSet[i]];
      rows.push(data[0].visits, data[0].leads);
  }

  Logger.log(rows)

Обратите внимание, что, поскольку каждый ключ в вашем объекте содержит массив,Я также добавил [0] к data.visits и data.leads, в результате чего rows.push(data[0].visits, data[0].leads);.

...