将HTTP请求的JSON格式化结果解析为列

时间:2018-03-22 09:47:16

标签: google-apps-script google-sheets

Google Apps脚本用于从API中提取数据。我想根据相关标题解析信息。

function Fraud2() {
  var ret = "no value";
  var response = UrlFetchApp.fetch("https://fraudshield.24metrics.com/api/v1/reports/fraud.json?tracker_id=905&group[]=sub_id&group[]=partner&date_start=2018-01-18&date_end=2018-01-18&timezone=UTC&user_id=XXX&api_token=XXX",{muteHttpExceptions:true})
  var user_id = "XXX";
  var api_token = "XXX";

  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([response]);
}

返回被推入一个单元格,如下所示:

 {"results":[{"tracker_id":905,"conversion":7883,"click":0,"goal":0,"approved":6511,"rejected":1372,"tracker":"Tatoo
 Integration","conversion_rate":"N\/A"},{"tracker_id":906,"conversion":1868,"click":0,"goal":0,"approved":1682,"rejected":186,"tracker":"Aise
 Integration","conversion_rate":"N\/A"},{"tracker_id":933,"conversion":413,"click":0,"goal":0,"rejected":290,"approved":123,"tracker":"Tatoo
 Invalids Integration","conversion_rate":"N\/A"}]}

我试了this但没有成功。

如何将结果整齐排列到列中?

2 个答案:

答案 0 :(得分:1)

您需要将响应对象转换为数组并附加数组:

{{1}}

答案 1 :(得分:1)

正如Hink所说,你需要先将对象转换为数组。

Hinks解决方案可以正常工作,但下面是您尝试在帖子中使用的代码的组合。

 function Fraud2() {

    var ss = SpreadsheetApp.getActiveSheet();
    var ret = "no value";
    var response = UrlFetchApp.fetch("https://fraudshield.24metrics.com/api/v1/reports/fraud.json?tracker_id=905&group[]=sub_id&group[]=partner&date_start=2018-01-18&date_end=2018-01-18&timezone=UTC&user_id=XXX&api_token=XXX",{muteHttpExceptions:true})

    var user_id = "XXX";
    var api_token = "XXX";

  var out=JSON.stringify(response.results);
      out=JSON.parse(out)

  var title = [];
   for (var i in out[0]) {
     title.push(i);
    }
      var res = [];
      res.push(title);
    for (var i in out) {
      var values = [];
    for (var j in out[i]) {
      values.push(out[i][j]);
    }
   res.push(values);
  }

 ss.getRange(1, 1, res.length, res[0].length).setValues(res);
};