Как импортировать в Google Sheet из ответа API с вложенными объектами JSON - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь импортировать данные из API в электронную таблицу Google.

Код ответа API приведен ниже:

{
  "2020-05-05": {
"downloads": 43,
"re_downloads": 8,
"uninstalls": 18,
"updates": 192,
"returns": 0,
"net_downloads": 43,
"date": "2020-05-05"
  },
  "2020-05-06": {
"downloads": 45,
"re_downloads": 7,
"uninstalls": 0,
"updates": 196,
"returns": 0,
"net_downloads": 45,
"date": "2020-05-06"
  },
}

Я использую это Import JSON .gs Script

Моя проблема в том, что когда я пытаюсь позвонить с запросом ключ объекта параметра для «2020-05-05», например: = ImportJSONBasicAuth («https://api.appfigures.com/v2/sales/dates/-7/0/?client_key=3120ef28b3dc4967ad602e81411a89d2», «my_username», «my_password», « / 2020-05-05 » )

Я получил нужный формат в таблице Google для объекта даты «2020-05-05». введите здесь описание изображения

Но, когда я пытаюсь получить все ключи объекта даты, добавляя строки по дате, например, без параметра поля даты, = ImportJSONBasicAuth ("https://api.appfigures.com/v2/sales/dates/-7/0/?client_key=3120ef28b3dc4967ad602e81411a89d2 "," my_username "," my_password "),

Он показывает все поля объекта, добавляя столбцы в Google Sheet: введите здесь описание изображения

Я хочу, чтобы все поля объектов даты добавлялись в Google Sheet. Поскольку я не писатель сценариев, я не знаю, где нужно обновлять редактор сценариев. Кто-нибудь может помочь мне показать все даты объекта, добавив строки по его дате c? Есть предложения или что нужно изменить в редакторе скриптов? Заранее спасибо.

1 Ответ

1 голос
/ 08 мая 2020

Это то, что вы ищете?

function myFunction() {
  const js='{"2020-05-05": {"downloads": 43,"re_downloads": 8,"uninstalls": 18,"updates": 192,"returns": 0,"net_downloads": 43,"date": "2020-05-05"  },  "2020-05-06": {"downloads": 45,"re_downloads": 7,"uninstalls": 0,"updates": 196,"returns": 0,"net_downloads": 45,"date": "2020-05-06"  }}';
  const data=JSON.parse(js);
  const sh=SpreadsheetApp.getActiveSheet();
  var oA=Object.keys(data);
  var vA=[];
  //var html="";
  oA.forEach(function(key){
    var kA=Object.keys(data[key]);
    var nA=new Array(kA.length-1);
    vA.push([key].concat(nA));
    vA.push(kA);
    //html+=Utilities.formatString('<br /><strong>%s</strong>',key);
    var row=[];
    kA.forEach(function(e){
      //html+=Utilities.formatString('<br />data[%s][%s]= %s',key,e,data[key][e]);
      row.push(data[key][e]);
    });
    vA.push(row);
    //html+='<hr>';
  });
  //SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html), "Test");
  sh.clear();
  sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
}

Это, вероятно, более стандартный подход. Функция с парочкой настроек.

function myFunction() {
  const js='{"2020-05-05": {"downloads": 43,"re_downloads": 8,"uninstalls": 18,"updates": 192,"returns": 0,"net_downloads": 43,"date": "2020-05-05"  },  "2020-05-06": {"downloads": 45,"re_downloads": 7,"uninstalls": 0,"updates": 196,"returns": 0,"net_downloads": 45,"date": "2020-05-06"  }}';
  const data=JSON.parse(js);
  const sh=SpreadsheetApp.getActiveSheet();
  var oA=Object.keys(data);
  var vA=[];
  //var html="";
  oA.forEach(function(key,i){
    var kA=Object.keys(data[key]);
    var nA=new Array(kA.length-1);
    //vA.push([key].concat(nA));
    if(i==0)vA.push(kA);
    //html+=Utilities.formatString('<br /><strong>%s</strong>',key);
    var row=[];
    kA.forEach(function(e){
      //html+=Utilities.formatString('<br />data[%s][%s]= %s',key,e,data[key][e]);
      row.push(data[key][e]);
    });
    vA.push(row);
    //html+='<hr>';
  });
  //SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html), "Test")
  sh.clear();
  sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
}
...