使用SwiftyJSON解析使用Swift的JSON时遇到问题

时间:2015-01-25 01:16:00

标签: json swift swifty-json

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

无论我做什么,我都无法分配变量" videoUploadId"使用" video_upload_id"的值来自JSON响应。我希望我提供足够的信息来获得一些帮助。感谢

以下是代码的一部分

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

回复:{URL:https:// / / videos / uploads /} {状态代码:201,headers {     连接="保持活力&#34 ;;     " Content-Length的" = 24;     "内容类型" =" application / json&#34 ;;     日期=" Sun,2015年1月25日01:02:42 GMT&#34 ;;     位置=" https:// / / videos / uploads /&#34 ;;     Server =" Apache / 2.2.15(CentOS)&#34 ;;     "的Set-Cookie" ="会话= eyJzZXNzaW9uX3Rva2VuIjp7IiBiIjoiUzAxWGFYRnlVVGM1YjBsa1kxWkJiV2xrYVZwcFZXdDFiR0ZLYW5GQ1VqRjFjbk5GIn19.B6XSMg.HXatQ76ZFaoZEQsnNu1BgsVECKA;仅Http;路径= /&#34 ;; }}

数据:< 7b227669 64656f5f 75706c6f 61645f69 64223a20 3736307d>

UTF8数据:{" video_upload_id":760}

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

从代码和控制台输出中可以看出,我试图以几种不同的方式设置变量,所有这些似乎都失败了。我收到错误"字典[" video_upload_id"]失败,它不是字典"我甚至尝试过前期" ["并附加"]"试着看看它是否是格式化问题。

任何线索?

1 个答案:

答案 0 :(得分:11)

您正在进行初始化错误。你应该使用:

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

将NSData转换为NSString不是必需的,并且在某种程度上错误。 SwiftyJSON只能用NSData或Swift对象初始化。