简体   繁体   English

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

[英]Unable to parse json using alamofire using closures

Currently learning Swift and I'm new to parsing of json.目前正在学习 Swift,我是解析 json 的新手。 I'm trying to parse json using alamofire using swift 3. However Im not getting any response.我正在尝试使用 swift 3 使用 alamofire 解析 json。但是我没有得到任何响应。 How should I get the value of parameter1 or parameter 2 which were nested?我应该如何获取嵌套的参数 1 或参数 2 的值? My json looks like this:我的 json 看起来像这样:

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

My swift code looks like this ,我的快速代码看起来像这样,

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()
    }

I recommend you that use SwiftJson ( https://cocoapods.org/pods/SwiftyJSON )我建议你使用 SwiftJson ( https://cocoapods.org/pods/SwiftyJSON )

if you need to validate that something exist you can use .exist() (Return a boolean)如果您需要验证某些东西是否存在,您可以使用 .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
    }

If you have this JSON and you need to know if parameter1 exist:如果你有这个 JSON 并且你需要知道参数 1 是否存在:

(Put a break point in print(json)) (在 print(json) 中放置一个断点)

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

In the code would be:在代码中将是:

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

        }

If you need to get the value would be:如果您需要获取该值将是:

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

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

Complete example:完整示例:

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"])
    }

The console log is:控制台日志是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM