Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 谷歌脚本空对象-don';我不明白为什么_Json_Google Apps Script_Typeerror - Fatal编程技术网

Json 谷歌脚本空对象-don';我不明白为什么

Json 谷歌脚本空对象-don';我不明白为什么,json,google-apps-script,typeerror,Json,Google Apps Script,Typeerror,我开始编写Google脚本来自动化某些任务,而现在我遇到了一个自己无法解决的问题。我必须说,我既不是应用程序脚本方面的专家,也不是javascript方面的专家 这是我的问题。我调用(私有)RESTAPI来检索一些数据。我得到结果,解析它得到一个Json对象。然后我想在电子表格中写一些属性。由于某些原因,我无法操作嵌套对象 假设我有一个json负载列表: { id: 2146904633, status: "in_progress", success_probabilit

我开始编写Google脚本来自动化某些任务,而现在我遇到了一个自己无法解决的问题。我必须说,我既不是应用程序脚本方面的专家,也不是javascript方面的专家

这是我的问题。我调用(私有)RESTAPI来检索一些数据。我得到结果,解析它得到一个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数据,业务联系人;
对于(i=0;i
我的问题是,当我调用businessContact.id时,我得到错误“TypeError:无法从null对象读取属性id”。我不明白,因为我可以从businessContact中看到内容:无论是从日志调用还是从调试器,它都绝对不是null

这似乎只发生在嵌套对象上,因为在简单属性上,我没有任何错误。我在所有嵌套对象上都有同样的问题,不管我到目前为止尝试了什么json负载

我在互联网上搜索了一个解决方案,但没有找到。这可能是非常基本的,但我不能让它工作

有什么想法吗?

您从未定义在日志记录程序中使用的“业务联系人”。您定义的是“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为null,我没有看到它:|

显然,当我学习一项新技术时,我应该停止工作到深夜


我的错,很抱歉吵闹,谢谢各位的回答和评论。

你从来没有给过businessContact一个价值。bc有一个,数据有。我的错,我粘贴的代码出错了。当前代码现在是正确的,但错误仍然存在。感谢示例Lenny,此循环比经典的for更干净。您可以使用“if”检查对象中是否存在属性,以避免类型错误<代码>如果(object.property&&object.property.childproperty){do something}其他{doSomethingElse}
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)
  })
}