在谷歌应用脚​​本

时间:2015-11-30 19:10:08

标签: javascript json parsing google-apps-script

我试图解析我从API调用中收到的JSON,但是我一直遇到错误" TypeError:无法读取属性" id"来自undefined。 (第42行,文件"")" 我对Apps脚本相对较新。关于什么事情的任何想法?我可以用JSON恢复有效载荷,但似乎无法解析它。

function getInfo() {
    var url = "https://subdomain.chargify.com/subscriptions.json";
    var username = "xxx"
    var password = "x"

    var headers = {
        "Authorization": "Basic " + Utilities.base64Encode(username + ':' + password)
    };

    var options = {
        "method": "GET",
        "contentType": "application/json",
        "headers": headers
    };

    var response = UrlFetchApp.fetch(url, options);
    var data = JSON.parse(response.getContentText());
    Logger.log(data);

    var id = data.subscription; // kicks back an error
    // var id = data;    works and returns the whole JSON payload

    var ss = SpreadsheetApp.getActiveSheet()
    var targetCell = ss.setActiveSelection("A1");
    targetCell.setValue(id);
}

2 个答案:

答案 0 :(得分:1)

根据这里的文件 https://docs.chargify.com/api-subscriptions#api-usage-json-subscriptions-list

当您调用/subscriptions.json端点时,它会返回一个订阅数组。因此,您的数据对象应该像:

一样处理
for (var i=0;i<data.length;i++) {
var item = data[i]; //subscription object, where item.subscription probably works
Logger.log(JSON.stringify(item));
}

答案 1 :(得分:0)

function getInfo() {
    var url = "https://subdomain.chargify.com/subscriptions.json";

    var username = "xxx"
    var password = "x"

    var headers = {
        "Authorization": "Basic " + Utilities.base64Encode(username + ':' + password)
    };

    var options = {
        "method": "GET",
        "contentType": "application/json",
        "headers": headers
    };

    var response = UrlFetchApp.fetch(url, options);
    var data = JSON.parse(response.getContentText());

    for (var i = 0; i < data.length; i++) {
        var item = data[i]; //subscription object, where item.subscription probably works
        Logger.log(JSON.stringify(item));
        var subscriptionid = item.subscription.id;
    }

    var ss = SpreadsheetApp.getActiveSheet()
    var targetCell = ss.setActiveSelection("A2");
    targetCell.setValue(subscriptionid);
}