如何在 SwiftyJSON 中遍历 JSON 数据

Posted

技术标签:

【中文标题】如何在 SwiftyJSON 中遍历 JSON 数据【英文标题】:How to loop through JSON data in SwiftyJSON 【发布时间】:2017-09-05 16:52:00 【问题描述】:

我有一个带有结构的 JSON 数据,但我不知道如何使用 for-loop 和 SwiftyJSON 来获取“路径”和“更新”值的每个部分条目。任何人都可以帮忙吗?谢谢。

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

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

我尝试编写部分 for 循环

let json = JSON(jsonData)

for ( ) in json 
   let filepath = 
   let updated = 

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

【问题讨论】:

【参考方案1】:

它在 README 的“循环”部分下: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 可编码:

struct FileInfo: Decodable 
    let path, updated: String


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

【讨论】:

【参考方案2】:

根据你的 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"]
    

【讨论】:

以上是关于如何在 SwiftyJSON 中遍历 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

我将如何使用 SwiftyJSON 解析这种类型的 JSON?

SwiftyJson 遍历几个数组没有循环

SwiftyJSON - 解析时如何遍历子节点

使用 SwiftyJSON 和 Alamofire 循环遍历 JSON

包含 SwiftyJSON 时返回数百个错误

使用 SwiftyJSON 遍历数据