【问题标题】:Parse JSON formatted result of HTTP request into columns将 HTTP 请求的 JSON 格式结果解析为列
【发布时间】:2018-03-24 13:19:41
【问题描述】:

用于从 API 提取数据的 Google Apps 脚本。我想根据相关的headers解析出信息。

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 没有成功。

如何将结果整齐地排列成列?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案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);
    };
    

    【讨论】:

    • 唯一的问题是脚本应该是动态的。我该如何解决?值被锁定在代码中,而更新的值应通过 API 传递。
    • 我已经修改了代码以使用您在上面发布的代码,但我还没有测试过。
    【解决方案2】:

    需要将响应对象转换成数组并追加数组:

    for (var i = 0; i < response.results.length; i++){
      var current = response.results[i];
      var myArray = [current.tracker_id, current.conversion, current.click, current.goal, current.approved, current.rejected, current.tracker,current.conversion_rate];
      sheet.appendRow(myArray);
    }
    

    【讨论】:

    • TypeError:无法从未定义中读取属性“长度”。 (第 5 行,文件“代码”)我试过 link 但不能让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2015-03-17
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多