2013-04-25 121 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不在相同的数据类型。第一队是阵列,第二队是对象。这就是为什么有两个不同的变量。