无法使用闭包使用 alamofire 解析 json

Posted

技术标签:

【中文标题】无法使用闭包使用 alamofire 解析 json【英文标题】:Unable to parse json using alamofire using closures 【发布时间】:2017-02-08 10:01:58 【问题描述】:

目前正在学习 Swift,我是解析 json 的新手。 我正在尝试使用 swift 3 使用 alamofire 解析 json。但是我没有得到任何响应。我应该如何获取嵌套的参数 1 或参数 2 的值? 我的 json 看起来像这样:

  "data":  
  "level1":  
     "level2":  
        "parameter1":"000000",
        "parameter2":"00/00/00 00:00:00",
        "parameter3":"00.0",
     

我的 swift 代码如下所示,

func downloadDataDetails(completed: @escaping DownloadComplete) 
    //Get data from URL
    Alamofire.request("MY_URL").responseJSON  response in
        let result = response.result

        if let dict = result.value as? Dictionary<String , AnyObject> 
            if let data = dict["data"] as? String 
                if let level1 = dict["level1"] as? String 
                    if let level2 = dict["level2"] as? String? 
                        self._myValue = level2
                    
                
            
        
        completed()
    

【问题讨论】:

【参考方案1】:

我推荐你使用 SwiftJson (https://cocoapods.org/pods/SwiftyJSON)

如果您需要验证某些东西是否存在,您可以使用 .exist()(返回布尔值)

func test() 
        let json: JSON = [   "data":[
            "level1":[
                "level2":[
                    "parameter1":"000000",
                    "parameter2":"00/00/00 00:00:00",
                    "parameter3":"00.0"
                ]
            ]
            ]
            ]
            print(json) //Create a breakpoint here
    

如果你有这个 JSON 并且你需要知道 parameter1 是否存在:

(在 print(json) 中打断点)

(在控制台中) (lldb)po json["data"]["level1"]["level2"]["parameter1"].exists() // response true

在代码中是:

if json["data"]["level1"]["level2"]["parameter1"].exists()

        

如果你需要得到的值是:

if json["data"]["level1"]["level2"]["parameter1"].exists()

            let parameter1 = json["data"]["level1"]["level2"]["parameter1"]
            print(parameter1)
        

完整示例:

func test() 
        let json: JSON = [   "data":[
            "level1":[
                "level2":[
                    "parameter1":"000000",
                    "parameter2":"00/00/00 00:00:00",
                    "parameter3":"00.0"
                ]
            ]
            ]
            ]
        if json["data"]["level1"]["level2"]["parameter1"].exists()

            let parameter1 = json["data"]["level1"]["level2"]["parameter1"]
            print(parameter1)
        
            print(json["parameter1"])
    

控制台日志是:

000000

  "data" : 
    "level1" : 
      "level2" : 
        "parameter1" : "000000",
        "parameter3" : "00.0",
        "parameter2" : "00\/00\/00 00:00:00"
      
    
  

【讨论】:

以上是关于无法使用闭包使用 alamofire 解析 json的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 AlamoFire 和 SwiftyJSON 解析 JSON

Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析

无法解析数据 JSON alamofire SwiftyJSON

无法解析响应 alamofire swift 3

如何在响应闭包中访问 Alamofire 请求参数?

使用 Alamofire 5 快速解析使用