简体   繁体   English

在Swift中将JSON解析为NSArray

[英]to Parse JSON to NSArray in Swift

i have an json data. 我有一个json数据。 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. 我可以把所有项目作为字符串或字典,但我不能得到“付款”项目作为数组..我想从“付款”获得数据和转换NSDictionary我尝试了几个方法,但我没有成功。

That is my JSON data. 那是我的JSON数据。

 [{ "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..? 我没有发现什么是错的..你可以帮帮我..?

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. 在这行代码中,您将从json字典访问付款数组。 That payments array contain inside the course. 该付款数组包含在课程内。

Just replace that json["payments"] array with courseTemp["payments"] 只需用courseTemp["payments"]替换json["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))
                        }
                    }
                }
            }
        }
    })

Try this: 尝试这个:

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
            // as Ramesh_T mentioned
            if let paymentsTemp = courseTemp["payments"] as? NSArray {
                println("That's OK!")
                for payment in paymentsTemp {
                    if let paymentTemp = payment as? [String: String] {
                       let date = paymentTemp["date"]
                       let pay = paymentTemp["payment"]
                       payments.append(Payment(date: date, payment: pay))
                    }
                }
            }
        }
    }
}
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM