4

I am trying to parse the following JSON

[
    {
        "id": "5",
        "name": "Test",
        "team1": "thingy team",
        "team2": "clicky team",
        "category": "4",
        "end_date": "1415217600",
        "cat_name": "new thingy",
        "team1_bets": 1,
        "team2_bets": 1
    }
]

This is the JSON I am getting from my web services, and I am using the following code to parse it:

let urlAsString = "http://codespikestudios.com/betting_app/bet/get_events/4"
    //let urlAsString = "http://api.topcoder.com/v2/challenges?pageSize=2"
    let url: NSURL  = NSURL(string: urlAsString)!
    let urlSession = NSURLSession.sharedSession()

    let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
        if (error != nil) {
            println(error.localizedDescription)
        }
        var err: NSError?

        var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
        if (err != nil) {
            println("JSON Error \(err!.localizedDescription)")
        }

        println(jsonTime)
    })
    jsonQuery.resume()

I am getting the following error

The operation couldn’t be completed. (NSURLErrorDomain error -1005.) fatal error: unexpectedly found nil while unwrapping an Optional value

how can I solve this?

3
  • Did you try to open the url in a browser? does it give you similar error? Commented Nov 10, 2014 at 9:20
  • yes the URL is working on browser Commented Nov 10, 2014 at 9:20
  • set a breakpoint in the first line of your completionHandler and check what's coming back (data) Commented Nov 10, 2014 at 9:22

2 Answers 2

1

Your URL is returning the following JSON -

[
    {
        "id": "5",
        "name": "Test",
        "team1": "thingy team",
        "team2": "clicky team",
        "category": "4",
        "end_date": "1415217600",
        "cat_name": "new thingy",
        "team1_bets": 1,
        "team2_bets": 1
    }
]

The outermost square brackets indicate that the root object is an array, so attempting to cast the result of your JSON parse to an NSDictionary causes problems.

Your code should be -

let urlAsString = "http://codespikestudios.com/betting_app/bet/get_events/4"
let url: NSURL  = NSURL(string: urlAsString)!
let urlSession = NSURLSession.sharedSession()

let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
    if (error != nil) {
        println(error.localizedDescription)
    }
    var err: NSError?

    var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSArray?
    if (err != nil) {
        println("JSON Error \(err!.localizedDescription)")
    }

    println(jsonResult!)
})
jsonQuery.resume()
Sign up to request clarification or add additional context in comments.

2 Comments

so, only objects can be taken NSDictionary?
JSON can have an NSDictionary or an NSArray as its outermost container - you need to code according to what the web service returns.
-2

From the CFNetworking source code I see -1005 referring to kCFURLErrorNetworkConnectionLost = -1005. So something is wrong with your connection.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.