2015-09-03 28 views
0

我做的JSON請求之一會返回一個帶有一堆嵌套信息的文件。格式大致如下:小組 - >個人小組 - >團隊小組。在Swift中爲JSON文件處理嵌套for循環

目前我正在處理與嵌套的for循環,我看外部組,然後運行內部循環獲取個別團隊的信息。

我已經上傳了一個JSON文件的副本來粘貼bin,這裏是鏈接。 http://pastebin.com/D14wYDEs。這個特殊的例子沒有那麼多的團隊和團隊,但它可能有更多的方式,這使嵌套for循環的概念看起來不切實際。

我想知道是否有人提出了一個更好的系統,或者真的有什麼建議。

繼承人我當前的代碼:

func generateTablaDePosiciones() { 
estadisticaUtilizada = 3 
var tablaDePosicionesJSON = getJSONStats(3,tkn,eqID) 

//checks to see that contents != nil, meaning the JSON file was found 
if tablaDePosicionesJSON != nil { 

    tablaDePosicionesArray.removeAll(keepCapacity: false) 
    var numeroDeGruposEnTablaDePosiciones = tablaDePosicionesJSON["grupos"].count 

    for var index = 0; index < numeroDeGruposEnTablaDePosiciones; ++index { 

     var grupo = tablaDePosicionesJSON["grupos"][index]["grupo"].string 
     var etiqueta1 = tablaDePosicionesJSON["grupos"][index]["etiqueta-1"].string 
     var etiqueta2 = tablaDePosicionesJSON["grupos"][index]["etiqueta-2"].string 
     var etiqueta3 = tablaDePosicionesJSON["grupos"][index]["etiqueta-3"].string 
     var etiqueta4 = tablaDePosicionesJSON["grupos"][index]["etiqueta-4"].string 
     var etiqueta5 = tablaDePosicionesJSON["grupos"][index]["etiqueta-5"].string 
     var preTablaDePosicionesNuevo = preTablaDePosiciones(grupo: grupo!, etiqueta1: etiqueta1!, etiqueta2: etiqueta2!, etiqueta3: etiqueta3!, etiqueta4: etiqueta4!, etiqueta5: etiqueta5!) 
     preTablaDePosicionesArray.append(preTablaDePosicionesNuevo) 

     numeroDeTablaDePosiciones = tablaDePosicionesJSON["grupos"][index]["lista-body"].count 

     for(var innerIndex = 0; innerIndex < numeroDeTablaDePosiciones; ++innerIndex) { 

      var rank = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["rank"].string 
      var equipoID = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["equipoID"].number! as Int 
      var nomEquipo = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["nom-equipo"].string 
      var d1 = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["d1"].string 
      var d2 = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["d2"].string 
      var d3 = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["d3"].string 
      var d4 = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["d4"].string 
      var d5 = tablaDePosicionesJSON["grupos"][index]["lista-body"][innerIndex]["d5"].string 

      var tablaDePosicionesNuevo = tablaDePosiciones(rank: rank!, equipoID: equipoID, nomEquipo: nomEquipo!, d1: d1!, d2: d2!, d3: d3!, d4: d4!, d5: d5!) 
       tablaDePosicionesArray.append(tablaDePosicionesNuevo) 
     } 
    } 
} else { 
    estadisticaUtilizada = 0 
    println("Tabla de Posiciones JSON was nil") 
} 

}

+1

你有什麼到目前爲止 – Lamar

+0

編輯補充我的代碼 – FredLoh

回答

1

我會用while循環。每次執行時增加一個索引,然後使用該索引動態構建密鑰。將結果收集到數組中,然後傳遞該數組而不是每個單獨的對象。

此外,你應該真正解開所有這些值,因爲你解析它們而不是強制解包(!)。在這個while循環中,您可以使用條件綁定while let來處理該問題,如果失敗 - 即。它沒有發現該鍵的價值 - 它會退出。

事情是這樣的:

var index = 1 
var results = [String]() 
while let etiqueta = grupo["etiqueta-\(index)"] as? String { 
    results.append(etiqueta) 
    index++ 
} 
let preTablaDePosicionesNuevo = preTablaDePosiciones(grupo: name, etiquetas: results) 
preTablaDePosicionesArray.append(preTablaDePosicionesNuevo)