to Parse JSON to NSArray in Swift

11,663

You did mistake in this line:

if let paymentsTemp = json["payments"] as? NSArray

In this line of code you are accessing the payments array from json dictionary. That payments array contain inside the course.

Just replace that json["payments"] array with courseTemp["payments"]

let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
        var errori: NSError?
        let jsonArr = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &errori) as NSArray
        for json in jsonArr {
            if let last_name = json["last_name"] as? String {
                let course = Course()
                if let courseTemp = json["course"] as? NSDictionary {
                    if let course_name = courseTemp["course_name"] as? String {
                        course.course_name = course_name
                    }
                    var payments = course.payments
                    if let paymentsTemp = courseTemp["payments"] as? NSArray {
                        println("That's OK!")
                        for payment in paymentsTemp {
                            let date = payment["date"] as String
                            let pay = payment["payment"] as String
                            payments.append(Payment(date: date, payment: pay))
                        }
                    }
                }
            }
        }
    })
Share:
11,663
umon
Author by

umon

I'm an Food Engineer, 26 years old and from Turkey. I hate My Job. I got a Android Programming Course, and i was coding with Android, Java and Swift Programming Languages since 2015.. Also, I'm a cyclist and (very) amateur photographer..

Updated on June 04, 2022

Comments

  • umon
    umon almost 2 years

    i have an json data. i can get all items as string or dictionary, but i couldn't get "payments" item as array.. i want to get datas from "payments" and to convert NSDictionary i tried a few ways but i didn't make it.

    That is my JSON data.

    [{
        "last_name": "aaa",
        "course": {
            "course_name": "bob",
            "payments": [
            {
            "date": "cc",
            },
            {
            "date": "dd",
            }
            ],
            "course_time": "ee"
        }
        },
        {
            "last_name": "ggg",
            "course": {
                "course_name": "bob",
                "payments": [{
                "date": "ddd",
                },
                {
                "date": "ff",
                }],
                "course_time": "hh"
            }
    }]
    

    And that is my code

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
        var errori: NSError?
        let jsonArr = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &errori) as NSArray
        for json in jsonArr {
            if let last_name = json["last_name"] as? String {
                let course = Course()
                if let courseTemp = json["course"] as? NSDictionary {
                    if let course_name = courseTemp["course_name"] as? String {
                        course.course_name = course_name
                    }
                    var payments = course.payments
                    if let paymentsTemp = json["payments"] as? NSArray {
                        println("That's OK!")
                        for payment in paymentsTemp {
                            let date = payment["date"] as String
                            let pay = payment["payment"] as String
                            payments.append(Payment(date: date, payment: pay))
                        }
                    }
                }
            }
        }
    })
    

    i didnt find what is wrong.. can u help me pls..?