json - 在 Swift 中处理 JSON 文件的嵌套 for 循环

标签 json swift

我发出的一个 JSON 请求返回一个包含一堆嵌套信息的文件。格式大致如下:团体->个人团体->团体中的团队。

目前,我正在使用嵌套的 for 循环来处理此问题,在该循环中,我查看外部组,然后运行内部循环以获取各个团队的信息。

我已将 JSON 文件的副本上传到粘贴箱,这是链接。 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")
}

}

最佳答案

我会使用while循环。每次执行时增加索引,然后使用该索引动态构造键。将结果收集到一个数组中,然后传递该数组而不是每个单独的对象。

此外,您确实应该在解析所有这些值时对其进行解包,而不是强制解包 (!)。在此 while 循环中,您可以使用条件绑定(bind) 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 )

关于json - 在 Swift 中处理 JSON 文件的嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383362/

相关文章:

string - 如何将 UnsafePointer<CUnsignedChar> 转换为字符串?

json - 在 Angular 6 的组件中处理来自 observable 的数据

json - 如何将空字符串解码为 nil

json - REST + json + JAXB + namespace

swift - 以协议(protocol)和符合类(!)实例作为参数的函数

ios - 测试无法导入子依赖项 - @testable import SubModule - 使用未声明的类型 'InternalSubModuleType'

ios - 我怎样才能将所有数据放在一个表中,而不是拆分到多个表中?

ios - 如何在 Swift 中设置代理?

java - 在 Jackson 中创建一个空的数组列表

arrays - 使用 PowerShell 创建单元素 Json 数组对象