Trouble parsing JSON with Swift using SwiftyJSON
Asked Answered
H

1

6

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?

Hensel answered 25/1, 2015 at 1:16 Comment(0)
T
11

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.

Trunks answered 25/1, 2015 at 2:23 Comment(2)
Cannot convert value of type 'JSON' to expected argument type 'Data' I face this issue when change code with aboveSuppuration
This is answered four years ago. Swift has changed significantly since then. I suggest to ignore this answer now.Trunks

© 2022 - 2024 — McMap. All rights reserved.