我开始编写Google脚本来自动完成某些任务,而且我在这里遇到了一个我自己无法解决的问题。我必须说我既不是app脚本专家,也不是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时,我收到错误&#34; TypeError:无法从null对象&#34;中读取属性id。我不明白,因为我可以看到来自businessContact的内容:无论是来自日志调用还是来自调试器,它肯定不是空的。
它似乎只发生在嵌套对象上,因为在简单的属性上,我没有任何错误。我在所有嵌套对象上都遇到了同样的问题,无论我到目前为止尝试过的json有效负载......
我在互联网上搜索了一个解决方案,但没有找到。这可能是非常基础的,但我无法让它发挥作用。
有什么想法吗?
答案 0 :(得分:1)
您永远不会定义您在记录器中使用的“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)
})
}
答案 1 :(得分:0)
我终于找到了解决方案。这段代码是循环的,有时候对象business_contact为null,我还没有看到它:
显然,当我学习一项新技术时,我应该在晚上停止工作......我的不好,对不起噪音,谢谢你的回答和评论。