在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
^
另外,result
和data
的"
应该被转义,因为它们在字符串的后面。例子:
{"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"
}
}