2017-01-26 15 views
1

特定のタスクを自動化するためのGoogleスクリプトを作成し始めています。ここでは自分では理解できない問題に取り組んでいます。私はアプリのスクリプトの専門家でも(まだ)またはJavaScriptでもないと言わなければならない。Googleスクリプトのヌルオブジェクト - 理由を理解できない

これは私の問題です。私はいくつかのデータを取得するために(プライベート)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が宣言された)コメントを.Thanks :)以下のコードは正しいですが、それでも動作しません。

この(過度に単純化された)コードと同じように私はそれを得る:私の問題は、私はbusinessContact.idを呼び出すときに、私はエラー「:nullのオブジェクトからプロパティIDを読み取ることができません例外TypeError」を得ることである

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から内容を見ることができるので理解できません:ログ呼び出しかデバッガかのどちらかから、それは絶対にnullではありません。

単純なプロパティではエラーが発生しないため、ネストされたオブジェクトでのみ発生するようです。そして、私はこれまでに試したjsonペイロードと同じネストされたオブジェクトに同じ問題を抱えています...

私は解決策をインターネットで検索しましたが、何も見つかりませんでした。それはおそらく非常に基本的ですが、私はそれを働かせることはできません。

+0

businessContactに値を与えないでください。 bcには1があり、データには値があります。 –

+0

私は悪いです、私は貼り付けたコードを間違えました。現在のコードは正しくなりましたが、まだバグはあります。 – daffycricket

答えて

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) 
    }) 
} 
+0

例Lennyのおかげで、このループは古典的なものよりはるかにクリーンです。 – daffycricket

+0

TypeErrorを回避するために、オブジェクトに "if"というプロパティが存在することを確認できます。 'if(object.property && object.property.childproperty){何かをする} else {doSomethingElse}' –

0

最終的に解決策が見つかりました。このコードはループになっています。時にはオブジェクトbusiness_contactがnullで、私はそれを見ていませんでした:

私は新しい技術を学ぶとき明らかに、私は私の悪いノイズのため申し訳ありません、と回答とコメントみんなに感謝...夜遅く働い

を停止する必要があります。

関連する問題