我是Swift的新手,正在尝试解析一些我从私有(private)API中检索的简单JSON数据。我正在使用SwiftJSON库。

无论我做什么,我都无法为变量“videoUploadId”分配来自JSON响应的“video_upload_id”值。我希望我提供了足够的信息以获取帮助。谢谢

这是一段代码

let task = session.dataTaskWithRequest(request, completionHandler: { (data : NSData!, response, error : NSError!) -> Void in
                if (error == nil) {
                    // Success
                    let statusCode = (response as NSHTTPURLResponse).statusCode
                    println("Status Code: \(statusCode)\r\n")

                    println("Response: \(response)\r\n")

                    println("Data: \(data)\r\n")

                    let dataContent = NSString(data: data!, encoding: NSUTF8StringEncoding)!

                    println("UTF8 Data: \(dataContent)\r\n")

                    let json = JSON(dataContent)

                    if let videoUploadId = json["video_upload_id"].int {

                        println("Video Upload ID (Dict: int): \(videoUploadId)")
                    }

                    else if let videoUploadId = json["video_upload_id"].string {

                        println("Video Upload ID (Dict: string): \(videoUploadId)")
                    }

                    else if let videoUploadId = json[0].int {

                        println("Video Upload ID (Array: int): \(videoUploadId)")
                    }

                    else if let videoUploadId = json[0].string {

                        println("Video Upload ID (Array: string): \(videoUploadId)")

                    }


                    else {
                        println(json["video_upload_id"].error)
                    }


                }
                else {
                    // Failure
                    println("URL Session Task Failed: %@", error.localizedDescription);
                }
            })
            task.resume()

这是我从控制台收到的信息:

登录响应:HTTP 200
状态码:201

响应:{网址:https:////videos/uploads/} {状态代码:201,标题{
连接=“保持 Activity ”;
“内容长度” = 24;
“Content-Type” =“应用程序/json”;
日期=“星期日,2015年1月25日01:02:42 GMT”;
位置=“https:////videos/uploads/”;
服务器=“Apache/2.2.15(CentOS)”;
“Set-Cookie” =“session = eyJzZXNzaW9uX3Rva2VuIjp7IiBiIjoiUzAxWGFYRnlVVGM1YjBsa1kxWkJiV2xrYVZwcFZXdDFiR0ZLYW5GQ1VqRjFJbk5G; CNX1; QN1; QN1; QN1; QN1; QN1; CnX1; QN1; CnX1; Q1J1; QN1; QN1; QN1; QN1; Q1J1; QN1; QN1; QN1; Q1J1; QN1; QN1; Q1J1; QN1; Q1C;
}}

数据:

UTF8数据:{“video_upload_id”:760}

可选(错误域= SwiftyJSONErrorDomain代码= 901“Dictionary [” video_upload_id“]失败,它不是字典” UserInfo = 0x170238620 {NSLocalizedDescription = Dictionary [“video_upload_id”]失败,它不是字典})

从代码和控制台输出中可以看到,我试图以几种不同的方式设置变量,所有这些似乎都失败了。我收到错误“Dictionary [“video_upload_id”]失败,这不是字典,我什至尝试在前缀“[”和前缀“]”之前尝试查看其格式问题。

有什么线索吗?

最佳答案

您执行的初始化错误。您应该使用:

let json = JSON(data:data) // data is NSData!

不必将NSData转换为NSString,并且为此存在某种错误。 SwiftyJSON只能使用NSData或Swift对象初始化。

07-24 22:04