2017-03-05 7 views
-1

現在、JSONについて学習しており、入れ子になっているデータを取得しようとしています。
"id"と "city"を取得したい。
FIXED - (javascript)入れ子になったJSONデータの解析に失敗しました

は、ここに私のコードです:

var url = "jsonURL"; 
$.getJSON (url, function(b) { 
    for (var i = 0; i < b.friends.data.length; i++) { 
    var data = b.friends.data[i]; 
     if (data.id == undefined) { 
      html+= "<td id='id'> - </td>"; 
     } 
     else { 
      html+= "<td id='id'>" + data.id + "</td>"; 
     } 
     if (data.location.location.city == undefined) { 
      html+= "<td id='city'> - </td>"; 
     } 
     else { 
      html+= "<td id='city'>" + data.location.location.city + "</td>"; 
     } 
    } 
} 

とJSONは、次のようになります。

 

    { 
     "friends": { 
      "data": [ 
      { 
       "id": "friend1", 
       "location": { 
        "location": { 
         "city": "Tangerang", 
         "country": "Indonesia" 
        }, 
        "id": "1" 
       } 
      }, 
      { 
       "id": "friend2", 
       "location": { 
        "location": { 
         "city": "Makassar", 
         "country": "Indonesia" 
        }, 
        "id": "2" 
       } 
      } 
      ], 
     }, 
     "id": "myID" 
    } 

問題:「ID」の合計データを約600
私はないは「都市」を取得しようとするんさ場合、ループは罰金です。
もしiがならばなら、 "id"のルーピングは4つのデータしか表示しません。
結果は

"Uncaught TypeError: Cannot read property 'location' of undefined"

です。何が間違っているのでしょうか?

UPDATE
=========================
は、固定されました。私は
data.location == undefined || data.location.location == undefined || data.location.location.city == undefined

+0

あなたは私が示したデータ処理するために働い示されたコード:https://jsfiddle.net/d2mL7stp/を。 (あなたの関数内のコードはJSONを扱っていません: '$ .getJSON()'メソッドはJSONを解析して(ネストされた)オブジェクトを作成し、そのオブジェクトを 'b'引数で関数に渡します) – nnnnnn

+0

合計データが約600の場合、ループは4つのデータしか表示しません。また、「都市」を削除すると、すべて正常になります。 – Igniel

+1

JSON *で動作しない部分が質問に表示されていないと言っていますか? – nnnnnn

答えて

0

Uncaught TypeError: Cannot read property 'location' of undefined

キャッチされないcatchステートメントでキャッチされなかったエラーを意味にそれを変更し、TypeErrorは、エラーの名前です。

未定義のオブジェクトのプロパティ 'location'にアクセスしようとしているようです。 がifステートメントを実行してcityを取得する前に定義されていることをテストします。

それは常に動作:

try{ 
    if (data.location.location.city == undefined) { 
     html+= "<td id='city'> - </td>"; 
    } else { 
     html+= "<td id='city'>" + data.location.location.city + "</td>"; 
    } 
}catch(e){ 
    if(e){ 
    // If fails, Do something else 
    } 
} 
関連する問題