簡體   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