web-dev-qa-db-fra.com

Importer JSON dans Google Sheet à l'aide du script Google Apps

J'utilise Apps Script dans Google Sheets pour importer du JSON à partir de Google Analytics. J'ai déjà utilisé la fonction ImportJSON pour obtenir facilement le JSON à partir d'une API ouverte utilisant simplement =ImportJSON(url) dans une cellule. Étant donné que j'utilise Apps Script pour autoriser les éléments de l'API Analytics (tout cela fonctionne correctement), je l'utilise également pour insérer les données JSON dans ma feuille. ImportJSON renvoie un tableau à deux dimensions contenant les données, la première ligne contenant des en-têtes. Cependant, j'ai du mal à obtenir l'étendue des données afin de pouvoir ajouter les valeurs à la feuille.

C'est ce que j'ai

function makeRequest() {
  var analyticsService = getAnalyticsService();
  var apiUrl = 'https://www.googleapis.com/analytics/v3/data/ga?ids=removed&start-date=30daysAgo&end-date=yesterday&metrics=ga%3AuniquePageviews&dimensions=ga%3ApagePath&sort=-ga%3AuniquePageviews&filters=ga%3ApagePath%3D%40%2FKnowledgeBank%2FFactsheetForFarmers.aspx&max-results=10&access_token=' + analyticsService.getAccessToken()
  var sheet = SpreadsheetApp.getActiveSheet();
  var jsonData = ImportJSON(apiUrl);
  var cell = sheet.getRange(jsonData.length,jsonData[0].length);
  cell.setValues(jsonData);
}

L'erreur que j'obtiens est . La hauteur de la plage est incorrecte. Elle était de 3 mais devrait être de 1 .

3
Abbie

Comme l'a souligné JPV, la ligne

var jsonData = ImportJSON(apiUrl);

n'est pas valide dans le script d'applications (à moins que vous n'ayez défini la fonction ImportJSON quelque part). Pour extraire quelque chose d'une URL externe dans le script Apps, on utilise UrlFetchApp . Donc, la ligne pourrait être

var jsonData = JSON.parse(UrlFetchApp.fetch(apiUrl).getContentText());

Après cela, jsonData est un objet JavaScript analysé à partir de la chaîne JSON renvoyée par le serveur. Pour l'importer dans une feuille de calcul, il faut créer un tableau double approprié pour passer à setValues. Comment faire cela dépend de la structure de l'objet.

Le pullJSON Gist que vous avez référencé donne un modèle simple de ce processus, qui fonctionne lorsque jsonData est déjà un tableau. Mais différentes API fonctionnent différemment: par exemple, l'API Stack Exchange renvoie un objet avec plusieurs propriétés "wrapper", dont l'une est items qui contient un tableau d'objets d'intérêt. Donc, dans ce cas, on ferait une boucle sur les éléments de jsonData.items, en extrayant les propriétés de chaque objet du tableau et en les poussant dans un double tableau.

2
user79865