Swift:过滤POST http请求答案



在swift上,我通过HTTP Post请求查询服务器,使用:

let myUrl = NSURL(string: "http://****.*****.***.***/****.php"); 
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST"
let session = NSURLSession.sharedSession()
var getDefaults = NSUserDefaults.standardUserDefaults();
var password = getDefaults.valueForKey("password") as! String;
var id = getDefaults.valueForKey("login") as! String;
var err: NSError?
let postString = "Method=Tasks.getTasksByFolder" + "&Identifiant=" + id + "&Password=" + password + "&data={"folder":"" + folder + ""}" // filter = {"folder":"INBOX"}
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
    data,response,error in
    if error != nil{
        println("error=(error)")
        return
    }
println("**** response = (response)")

let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("**** response data = (responseString)")

var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary

}
task.resume()

它工作了,这是它返回给我的一个例子:

**** response data = Optional({"result":true,"data":"[{"id":"b43bd766295220b23279899d025217d18e98374a","container_id":"6658","created_by":"76bbfe695318d471a541bc3333e58eea28acae54","creation_time":"2015-05-26 15:20:32","last_modified_by":null,"last_modified_time":null,"is_deleted":"0","deleted_by":null,"deleted_time":null,"percent":"0","completed":null,"due":null,

等等……

我试图过滤这个JSON编码的答案,事实上,我只想要一些信息,而不是全部。例如,我只想让"container_id", "creation_time""last_modified_by"打印到UITableView上。我怎么才能拿到呢?是POST请求上的,还是答案上的过滤器?我在网上搜索了一段时间,我没有发现任何东西,摘录JSON parser的使用,如https://github.com/owensd/json-swift,但我有一个问题…我没有JSON数据写在我的代码,它是通过HTTP Post请求获得的。作为结果,

if let last_modified_by = json["last_modified_by"].string{
    println("last_modified_by = '(last_modified_by)'")
}

得到错误"Ambiguous use of 'string'"

希望我足够简洁,如果你需要更多的代码或解释,我可以编辑我的帖子。

问候,

fselva

你的JSON字符串是错误的,有一个"不应该在数组分隔符之前:

{"result":true,"data":"[{"id":"b43bd766295
                      ^

另外,resultdata"应该被转义,因为它们在字符串的后面。例子:

{"result":true,"data":[{"id":"b43bd766295220b23279899d025217d18e98374a", ...

在那之后,你就可以开始了:

var err: NSError?
let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &err) as? [String:AnyObject]
// we cast `json!["data"]` as an array of dictionaries
if let dataDic = json!["data"] as? [[String:AnyObject]] {
    if let firstID = dataDic[0]["id"] as? String {
        println(firstID) // "b43bd766295220b23279899d025217d18e98374a"
    }
}

最新更新