【问题标题】:Undefined Error when parsing JSON in google apps script在谷歌应用程序脚本中解析 JSON 时出现未定义错误
【发布时间】:2016-03-04 12:45:08
【问题描述】:

我正在尝试解析从 API 调用中收到的 JSON,但我一直遇到错误 "TypeError: Cannot read property "id" from undefined. (line 42, file "")" em> 我对 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);
}

【问题讨论】:

  • 您对data 的记录显示了什么?显然结构的顶层没有subscription 键。
  • @Teemu,在 GAS 中,它是同步的。

标签: javascript json parsing google-apps-script


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

【讨论】:

  • 谢谢瑞尔。你的解决方案奏效了。这就是我最终做的事情。
【解决方案2】:
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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 2016-12-30
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多