如何在swift iOS Request中获取数组响应

时间:2018-02-10 11:47:55

标签: ios arrays swift dictionary request

我发送这样的请求:

let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {
                // check for fundamental networking error
                print("error=\(String(describing: error))")
                completion(nil)
                return
            }


            print("********_Respone status code is: ",(response as! HTTPURLResponse).statusCode)
            print("********_Respone url code is: ",response?.url as Any )

            do {
                let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String: Any]

                let res:HTTPURLResponse = response as! HTTPURLResponse

                print(json)// yessssssssss goooood
            } catch {
                completion(nil)
                return
            }
}


        task.resume()

当响应是一个字典时,它正常工作,但当我的响应是一个数组时显示此错误:

  

无法将“__NSArrayI”类型的值转换为“NSDictionary”

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

反序列化JSON 一次并省略选项,ArrayDictionary不是碎片。然后可选绑定结果。

do {
     let json = try JSONSerialization.jsonObject(with: data)
     if let jsonArray = json as? [[String:Any]] {
        print("json is array", jsonArray)
     } else if let jsonDictionary = json as? [String:Any] {
        print("json is dictionary", jsonDictionary)
     } else {
        print("This should never be displayed")
     }
} ...

如果结果应该只是数组或字典,那么您可以强制将结果解包到字典并删除最后一个else子句

do {
     let json = try JSONSerialization.jsonObject(with: data)
     if let jsonArray = json as? [[String:Any]] {
        print("json is array", jsonArray)
     } else {
        let jsonDictionary = json as! [String:Any] 
     }
} ...