2013-04-25 145 views
2

我有一個JSON對象下面,有多個嵌套部門,第一個沒有任何標識符。我正在嘗試使用for循環訪問最後一個分區內的團隊,但我無法訪問它們。需要一些指導。使用For循環與JSON

{ 
    "division": { 
     "division": [ 
      { 
       "team": { 
        "id": "229525", 
        "name": "MyTeam", 
        "photo": "", 
        "visible": "True", 
        "RosterView": "True", 
        "PublicResults": "True", 
        "Statistics": "False", 
        "privilege": [ 
         "False", 
         "True", 
         "True", 
         "True", 
         "True", 
         "True", 
         "True" 
        ] 
       }, 
       "name": "Boys 9-10", 
       "id": "12897", 
       "sort": "0", 
       "open": "0" 
      }, 
      { 
       "team": [ 
        { 
         "id": "229523", 
         "name": "Cougars", 
         "photo": "", 
         "visible": "True", 
         "RosterView": "True", 
         "PublicResults": "True", 
         "Statistics": "False", 
         "privilege": [ 
          "False", 
          "True", 
          "True", 
          "True", 
          "True", 
          "True", 
          "True" 
         ] 
        }, 
+1

你的意思是在JavaScript? – 2013-04-25 01:06:59

+0

是的,這將有助於瞭解什麼語言。並在其他地方看到我的「剝洋蔥」演講 - 只需一步一步,在刪除每一層之後使用NSLog來查看下一步是什麼。你必須兩次找到「師」,然後你有一系列的「對象」,每個「對象」顯然對應於一個「團隊」。但是由於第一個「團隊」是一個「對象」,而第二個是一個數組,因此您已經在某處亂碼了JSON。 – 2013-04-25 01:16:11

+0

提示:轉到json.org。 – 2013-04-25 01:17:05

回答

1

更新:嗯,仔細閱讀你的JSON後,我注意到第一師只有1個團隊,因爲團隊只有一個對象。但是由於團隊中有一系列對象,所以第二師似乎有不止一個團隊。我想你必須處理一個部門只有一個團隊的情況。

你的for循環幾乎是正確的。試試這個:

var divisions = JSONObject.division.division; 

for (var i=0; i < divisions.length; i++) { 
    // handle division of one team here, 
    // don't need for loop if there only one team 
    // just do division[i].team.id 
    for (var j=0; j < divisions[i].length; j++) { 
     var teamId = divisions[i].team[j].id; 
     alert(teamId); 
    } 
} 

你的循環是

for (i=0; i <= JSONObject.division.division.teams[i].length; i++) { } 

它有2個問題,第一你是做i <= ...length; i++ 第二跳過最後一個元素,JSONObject.division.division.teams[i]不是一個數組,但是這一個JSONObject.division.division[i].team會給你是一個部門中所有團隊的陣列。然後,你可以通過它的索引獲得你想要的團隊:)

+1

有時候,如果只有一個JSON,就會使用on對象構造JSON,而使用包含多個對象的數組。這當然意味着數據的形式必須在訪問之前進行測試。 – 2013-04-25 02:42:09

1

首先,你應該修復json中的圓括號。

var a = { 
    "division": { 
     "division": [ 
      { 
       "team": { 
        "id": "229525", 
        "name": "MyTeam", 
        "photo": "", 
        "visible": "True", 
        "RosterView": "True", 
        "PublicResults": "True", 
        "Statistics": "False", 
        "privilege": [ 
         "False", 
         "True", 
         "True", 
         "True", 
         "True", 
         "True", 
         "True" 
        ] 
       }, 
       "name": "Boys 9-10", 
       "id": "12897", 
       "sort": "0", 
       "open": "0" 
      }, 
      { 
       "team": [ 
        { 
         "id": "229523", 
         "name": "Cougars", 
         "photo": "", 
         "visible": "True", 
         "RosterView": "True", 
         "PublicResults": "True", 
         "Statistics": "False", 
         "privilege": [ 
          "False", 
          "True", 
          "True", 
          "True", 
          "True", 
          "True", 
          "True" 
         ] 
        } 
        ] 
      } 
     ] 
    } 
} 

然後你就可以達到第二個 '團隊' 的對象有:

a['division']['division'][1]['team'][0]['id']; 

這會給你id。你可以選擇任何你想要的。它並不複雜。只是讀它像一個謎題。

這裏是活生生的例子:JSFiddle

這裏有一些for循環:

var json1 = a['division']['division'][1]['team'][0]; // this is for second team array, 
    json2 = a['division']['division'][0]['team']; // this is for first team object, 

for (obj in json1){ 
    return json[obj]; 
}; 

根據您的JSON,第一和第二teams不在相同的數據類型。第一隊是陣列,第二隊是對象。這就是爲什麼有兩個不同的變量。