![](/img/trans.png)
[英]Don't understand why this NameError: name 'null' is not defined exception occurs
[英]Google script null object - don't understand why
我开始编写谷歌脚本来自动化某些任务,在这里我遇到了一个我自己无法解决的问题。 我必须说我既不是应用程序脚本方面的专家(还),也不是 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:无法从空对象读取属性 ID”。 我不明白,因为我可以看到 businessContact 的内容:无论是从日志调用还是从调试器,它肯定不是空的。
它似乎只发生在嵌套对象上,因为在简单的属性上,我没有任何错误。 而且我在所有嵌套对象上都有同样的问题,无论我到目前为止尝试过什么 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 为空而我没有看到它:|
显然,当我学习一项新技术时,我应该停止工作到深夜......
我的不好,对噪音感到抱歉,并感谢您的回答和评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.