Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble parsing JSON with Swift using SwiftyJSON

I am new to swift and I am trying to parse some simple JSON data I am retrieving from a private API that I have. I am using the SwiftJSON library.

No matter what I do I cannot assign the variable "videoUploadId" with the value of "video_upload_id" coming from the JSON response. I hope i provided enough info to get some help. Thanks

Here is a segment of the code

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

This is what I am receiving from my console:

Login Response: HTTP 200 Status Code: 201

Response: { URL: https:////videos/uploads/ } { status code: 201, headers { Connection = "Keep-alive"; "Content-Length" = 24; "Content-Type" = "application/json"; Date = "Sun, 25 Jan 2015 01:02:42 GMT"; Location = "https:////videos/uploads/"; Server = "Apache/2.2.15 (CentOS)"; "Set-Cookie" = "session=eyJzZXNzaW9uX3Rva2VuIjp7IiBiIjoiUzAxWGFYRnlVVGM1YjBsa1kxWkJiV2xrYVZwcFZXdDFiR0ZLYW5GQ1VqRjFjbk5GIn19.B6XSMg.HXatQ76ZFaoZEQsnNu1BgsVECKA; HttpOnly; Path=/"; } }

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

UTF8 Data: {"video_upload_id": 760}

Optional(Error Domain=SwiftyJSONErrorDomain Code=901 "Dictionary["video_upload_id"] failure, It is not an dictionary" UserInfo=0x170238620 {NSLocalizedDescription=Dictionary["video_upload_id"] failure, It is not an dictionary})

As you can see from the code and console output, I am attempting to set the variable in several different ways all of which seem to fail. I am receiving the error "Dictionary["video_upload_id"] failure, It is not an dictionary" I even tried prepending "[" and appending "]" to try to see if its a formatting issue.

Any clues?

like image 379
Dean D D Avatar asked Jan 25 '15 01:01

Dean D D


1 Answers

You are doing the initialization wrong. You should use:

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

Converting NSData to NSString is not necessary, and somehow wrong for this. SwiftyJSON can only be initialized with NSData or Swift object.

like image 184
skyline75489 Avatar answered Sep 25 '22 14:09

skyline75489