解析谷歌应用程序脚本中的JSON时出现未定义错误

Undefined Error when parsing JSON in google apps script

本文关键字:未定义 错误 JSON 谷歌 应用程序 脚本      更新时间:2023-09-26

我正在尝试分析从API调用接收的JSON,但我一直遇到错误"TypeError:无法从未定义中读取属性"id"。(第42行,文件")"我对应用程序脚本相对较新。有什么想法吗?我可以用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);
}

根据此处的文档https://docs.chargify.com/api-subscriptions#api-使用json订阅列表

当您调用/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));
}
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);
}