如何在SwiftyJSON中循环遍历JSON数据

时间:2017-09-05 16:52:00

标签: ios swift3 swifty-json

我有一个带结构的JSON数据,我不知道如何使用SwiftyJSON for循环获取" path"的每个部分条目。和"更新"值。有人可以帮忙吗?感谢。

var jsonData = "{
      "css":[
         {
            "path": "style.css",
            "updated": "12432"
         },
         {
            "path": "base.css",
            "updated": "34627"
         },

      ],
      "html":[
         {
            "path": "home.htm",
            "updated": "3223"
         },
         {
            "path": "about",
            "updated": "3987"
         }
      ]
    }
"

我尝试编写for-loop的一部分

let json = JSON(jsonData)

for ( ) in json {
   let filepath = 
   let updated = 

   // do searching another json to found file exists and updates
}

2 个答案:

答案 0 :(得分:2)

它位于README上,名为" loop":https://github.com/SwiftyJSON/SwiftyJSON#loop

// If json is .Dictionary
for (key,subJson):(String, JSON) in json {
   //Do something you want
}

// If json is .Array
// The `index` is 0..<json.count's string value
for (index,subJson):(String, JSON) in json {
    //Do something you want
}

应用于您的特定JSON结构:

    let jsonData = """
    {
      "css": [
        {
          "path": "style.css",
          "updated": "12432"
        },
        {
          "path": "base.css",
          "updated": "34627"
        }
      ],
      "html": [
        {
          "path": "home.htm",
          "updated": "3223"
        },
        {
          "path": "about",
          "updated": "3987"
        }
      ]
    }
    """.data(using: .utf8)!

    let json = JSON(data: jsonData)

    for (_, subJson):(String, JSON) in json {

        for (_, subJson):(String, JSON) in subJson {
            let filepath = subJson["path"].stringValue
            let updated  = subJson["updated"].stringValue

            print(filepath + " ~ " + updated)
        }
    }

使用Swift 4 Codable:

struct FileInfo: Decodable {
    let path, updated: String
}

let dec = try! JSONDecoder().decode([String:[FileInfo]].self,from: jsonData)
print(dec)

答案 1 :(得分:1)

根据您的JSON结构,请使用:

for (index,subJson):(String, JSON) in json {
    print(index) // this prints "css" , "html"
    for (key,subJson):(String, JSON) in subJson {
        let filepath = subJson["path"]
        let updated  = subJson["updated"]
    }
}