json - Swift:过滤 POST http 请求答案

标签 json uitableview swift http post

在 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解析器的使用,如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)'")
}

收到错误“'字符串'的使用不明确”

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

问候,

fselva

最佳答案

您的 JSON 字符串错误,数组分隔符之前不应该出现 ":

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

此外,resultdata" 应该被转义,因为它们位于字符串的后面。示例:

{\"结果\":true,\"数据\":[{\"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"
    }
}

关于json - Swift:过滤 POST http 请求答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30569960/

相关文章:

javascript - 将 JavaScript 文件转换为 JSON

ios - 移动行(在 :to:) doesn't work if the UITableView has many items

ios - 从自定义 Cell 中正确委托(delegate)按钮操作以删除 UITableView 中的行

ios - 删除动画不显示

ios - 将 MPMediaItem 添加到 MPMediaItemCollectino

ios - 尝试将大量关闭数据加载到我的应用程序时应用程序崩溃

javascript - 将所有 JSON 值放入单独的 <div> 中

json - 何时在 JSON 中使用列表

ios - UITableView:使用 moveRowAtIndexPath:toIndexPath: 和 reloadRowsAtIndexPaths:withRowAnimation: 一起出现损坏

ios - 操作按钮未出现在通知 iOS 10 中