繁体   English   中英

谷歌脚本空对象 - 不明白为什么

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM