首页 > 解决方案 > 如何使用嵌套 JSON 对象从 API 响应导入 Google 表格

问题描述

我正在尝试从 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"
  },
}

我正在使用这个ImportJSON.gs脚本

我的问题是,当我尝试使用“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 表格中添加列来显示所有对象字段: 在此处输入图像描述

我希望通过在 Google 表格中添加行来所有日期对象字段。 由于我不是脚本编写者,因此我不知道更多需要在哪里更新 script 脚本编辑器。任何人都可以通过按特定日期添加行来帮助我显示所有对象日期?有什么建议或需要在脚本编辑器中修改什么?提前致谢。

标签: jsongoogle-apps-scriptgoogle-sheets

解决方案


这是你要找的吗?

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);
}

推荐阅读