Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to loop through JSON responses inside Apps Script

I want to import Data from the Snapchat API inside Google Sheets (Documentation found here: https://marketingapi.snapchat.com/docs/?shell#get-all-ad-squads-under-a-campaign).

At the moment I am doing that in an inefficient way, by plotting the results one at a time. I want, instead, to plot them using a loop, if possible.

Currently, this is my code:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

function readData() {

var accesstoken = "TOKEN"

 var sheet = SpreadsheetApp.getActiveSheet()

 var adseturl = "https://adsapi.snapchat.com/v1/campaigns/e431cbcd-2281-49fe-8d05-b26c87660eb5/adsquads"
 var adseturlresponse = UrlFetchApp.fetch(adseturl, {
       headers: {
           "Authorization": "Bearer " + accesstoken
       }
   });

var adsetdata = JSON.parse(adseturlresponse.getContentText());
var adsetname1range = sheet.getRange('C3')
var adsetname2range = sheet.getRange('C4')
var adsetname3range = sheet.getRange('C5')
var adsetname4range = sheet.getRange('C6')
var adsetname5range = sheet.getRange('C7')
var adsetname6range = sheet.getRange('C8')
var adsetname7range = sheet.getRange('C9')
var adsetname8range = sheet.getRange('C10')

var adsetname1= adsetdata.adsquads[0].adsquad.name
adsetname1range.setValue(adsetname1)
    
var adsetname2= adsetdata.adsquads[1].adsquad.name  
adsetname2range.setValue(adsetname2)

var adsetname3= adsetdata.adsquads[2].adsquad.name
adsetname3range.setValue(adsetname3)

var adsetname4= adsetdata.adsquads[3].adsquad.name 
adsetname4range.setValue(adsetname4)

var adsetname5= adsetdata.adsquads[4].adsquad.name  
adsetname5range.setValue(adsetname5)

var adsetname6= adsetdata.adsquads[5].adsquad.name
 adsetname6range.setValue(adsetname6)

var adsetname7= adsetdata.adsquads[6].adsquad.name  
adsetname7range.setValue(adsetname7)

var adsetname8= adsetdata.adsquads[7].adsquad.name     
adsetname8range.setValue(adsetname8)

}

As you can see, I am plotting my results one by one, like this:

var adsetdata = JSON.parse(adseturlresponse.getContentText());
var adsetname1range = sheet.getRange('C3')
var adsetname2range = sheet.getRange('C4')
var adsetname3range = sheet.getRange('C5')
var adsetname4range = sheet.getRange('C6')
var adsetname5range = sheet.getRange('C7')
var adsetname6range = sheet.getRange('C8')
var adsetname7range = sheet.getRange('C9')
var adsetname8range = sheet.getRange('C10')

var adsetname1= adsetdata.adsquads[0].adsquad.name
adsetname1range.setValue(adsetname1)
    
var adsetname2= adsetdata.adsquads[1].adsquad.name  
adsetname2range.setValue(adsetname2)

var adsetname3= adsetdata.adsquads[2].adsquad.name
adsetname3range.setValue(adsetname3)

var adsetname4= adsetdata.adsquads[3].adsquad.name 
adsetname4range.setValue(adsetname4)

var adsetname5= adsetdata.adsquads[4].adsquad.name  
adsetname5range.setValue(adsetname5)

var adsetname6= adsetdata.adsquads[5].adsquad.name
 adsetname6range.setValue(adsetname6)

var adsetname7= adsetdata.adsquads[6].adsquad.name  
adsetname7range.setValue(adsetname7)

var adsetname8= adsetdata.adsquads[7].adsquad.name     
adsetname8range.setValue(adsetname8)

But instead, I want to be able to loop through

adsetdata.adsquads[i].adsquad.name  

Also, here my results are from "C3:C10" but the number of rows is dynamic depending on the number of results.

Thank you for your input in how I can achieve this.

>Solution :

In your script, how about the following modification?

From:

var adsetname1range = sheet.getRange('C3')
var adsetname2range = sheet.getRange('C4')
var adsetname3range = sheet.getRange('C5')
var adsetname4range = sheet.getRange('C6')
var adsetname5range = sheet.getRange('C7')
var adsetname6range = sheet.getRange('C8')
var adsetname7range = sheet.getRange('C9')
var adsetname8range = sheet.getRange('C10')

var adsetname1= adsetdata.adsquads[0].adsquad.name
adsetname1range.setValue(adsetname1)
    
var adsetname2= adsetdata.adsquads[1].adsquad.name  
adsetname2range.setValue(adsetname2)

var adsetname3= adsetdata.adsquads[2].adsquad.name
adsetname3range.setValue(adsetname3)

var adsetname4= adsetdata.adsquads[3].adsquad.name 
adsetname4range.setValue(adsetname4)

var adsetname5= adsetdata.adsquads[4].adsquad.name  
adsetname5range.setValue(adsetname5)

var adsetname6= adsetdata.adsquads[5].adsquad.name
 adsetname6range.setValue(adsetname6)

var adsetname7= adsetdata.adsquads[6].adsquad.name  
adsetname7range.setValue(adsetname7)

var adsetname8= adsetdata.adsquads[7].adsquad.name     
adsetname8range.setValue(adsetname8)

To:

var values = adsetdata.adsquads.map(({ adsquad: { name } }) => [name]);
sheet.getRange(3, 3, values.length).setValues(values);
  • When this modified script is run, the values are retrieved from an aray of adsetdata.adsquads and put to column "C".

Reference:

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading