Google脚本null对象 - 不明白为什么
我开始编写 Google 脚本来自动执行某些任务,但遇到了一个我自己无法解决的问题。我必须说,我既不是应用程序脚本方面的专家(目前),也不是 javascript 方面的专家。
这是我的问题。我调用(私有)REST API 来检索一些数据。我得到结果,解析它以获取 Json 对象。然后我想在电子表格中写入一些属性。由于某种原因,我无法操作嵌套对象。
假设我有此 json 有效负载的列表:
{
id: 2146904633,
status: "in_progress",
success_probability: 99,
amount: "0.0",
decision_maker: "Bob Mauranne",
business_contact: {
id: 2142664162,
nickname: "NIL",
}
}
编辑:我粘贴的代码有误(未声明 businessContact,而是声明了变量 bc)。感谢您的评论 :) 现在,下面的代码是正确的,但仍然不起作用。
我得到类似这样的(过于简化的)代码:
var response = UrlFetchApp.fetch(url);
var dataAll = JSON.parse(response.getContentText());
var data, businessContact;
for (i = 0; i < dataAll.length; i++) {
data = dataAll[i];
businessContact = data.business_contact;
Logger.log(data.status);
Logger.log(businessContact);
Logger.log(businessContact.id);
}
我的问题是,当我调用 businessContact.id 时,我收到错误“TypeError:无法从 null 对象读取属性 id”。我不明白,因为我可以从 businessContact 中看到内容:无论是从日志调用还是从调试器中,它都绝对不为 null。
它似乎只发生在嵌套对象上,因为在简单属性上,我没有任何错误。而且我在所有嵌套对象上都遇到了同样的问题,无论我到目前为止尝试过什么 json 负载...
我在互联网上搜索解决方案,但没有找到。它可能非常基础,但我无法让它工作。
有什么想法吗?
您从未定义过在记录器中使用的“businessContact”。您定义了“bc”,但没有定义“businessContact”。如果您将其更改为 Logger.log(bc.id),它应该可以工作。
以下是您要尝试执行的操作的精简版本。
function getJSON() {
var url = "your url";
var response = UrlFetchApp.fetch(url).getContentText();
var data = JSON.parse(response)
data.forEach(function(item) {
Logger.log(item.business_contact.id)
})
}
以下是提取天气数据的示例。
function myFunction() {
var url = "https://www.aviationweather.gov/gis/scripts/TafJSON.php";
var response = UrlFetchApp.fetch(url).getContentText();
var data = JSON.parse(response)
data.features.forEach(function(feature) {
Logger.log(feature.properties.id)
})
}
我终于找到了解决方案。此代码处于循环中,有时对象 business_contact 为空,而我却没有看到它 :|
显然,当我学习新技术时,我应该在深夜停止工作……
我的错,抱歉打扰了,感谢大家的回答和评论。