如何使用 Swifty Json 将 POST 请求中的 JSON 数据保存到字典中?

Posted

技术标签:

【中文标题】如何使用 Swifty Json 将 POST 请求中的 JSON 数据保存到字典中?【英文标题】:How to save JSON data from a POST Request into dictionary with Swifty Json? 【发布时间】:2016-07-25 03:45:40 【问题描述】:

我能够在控制台中打印 json 数据,如下所示

 
    "created_at" : "2016-07-21 20:46:53",
    "name" : "PB Admin",
    "id" : 1,
    "updated_at" : "2016-07-21 12:46:53", 
    "lname" : "Admin",
    "access_lvl" : 1,
    "email" : "admin@admin.com",
    "fname" : "PB"

,但无法将其保存到字典中。

POST请求的方法

private func makeHTTPPostRequest(path: String, body: NSDictionary) 
    let request = NSMutableURLRequest(URL: NSURL(string: path)!)

    // Set the method to POST
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    request.HTTPMethod = "POST"

    do 
        // Set the POST body for the request
        let jsonBody = try! NSJSONSerialization.dataWithJSONObject(body, options: [])
        request.HTTPBody = jsonBody
        let session = NSURLSession.sharedSession()

        let task = session.dataTaskWithRequest(request, completionHandler: data, response, error -> Void in
            let json:JSON = JSON(data: data!)
            print(json)//print on console

//i need to get the json data from here, but for some reason it would skip 
//this method
            self.parseJSON(json)
        )

        task.resume()
     catch 
        // Create your personal error
        //onCompletion(nil, nil)
    

此方法应将 json 数据保存到字典中

private func parseJSON(json: JSON) 

    for(_, object) in json 

        let createdAt = object["created_at"].stringValue
        let name = object["name"].stringValue
        let id = object["id"].stringValue
        let updatedAt = object["updated_at"].stringValue
        let lName = object["lname"].stringValue
        let accessLvl = object["access_lvl"].stringValue
        let email = object["email"].stringValue
        let fname = object["fname"].stringValue

        let obj = ["createdAt":createdAt, "name":name, "id":id, "updatedAt":updatedAt, "lName":lName, "accessLvl":accessLvl, "email":email, "fname":fname ]

        objects.append(obj)//wherein objects is a string dictionary
    

每当我调试代码时,即使整个处理完成,对象字典也始终为空。

【问题讨论】:

【参考方案1】:

您可以将您的 JSON 数据转换为 NSData,这样您就可以轻松地从 NSData 而不是 JSON 获取您的数据。

public class func jsonToNSData(json: AnyObject) -> NSData?
    return NSJSONSerialization.dataWithJSONObject(json, options: .allZeros, error: nil)

然后您可以创建一个返回 NSDictionary 的函数,如下所示:

func parseJSON(data: NSData) -> NSDictionary
        var dic: NSDictionary!
        do 
            boardsDictionary = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary

         catch let error as NSError 
            print(error.localizedDescription)
            print("Error could not parse JSON data, it's null maybe?!!")
        
        //'\(jsonStr)'

        return dic
    

最后一个:创建你的字典

let dic = parseJSON(jsonToNSData(YourJsonData)) as! NSDictionary

希望对你有帮助。

【讨论】:

【参考方案2】:

让 jsonDictionary = 试试! NSJSONSerialization.JSONObjectWithData(数据!, 选项:NSJSONReadingOptions.MutableContainers)为! NSDictionary

【讨论】:

以上是关于如何使用 Swifty Json 将 POST 请求中的 JSON 数据保存到字典中?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swifty 在 Swift 中将 JSON 作为字符串返回

如何使用 Swifty 动态创建具有多个键和值的 json 对象

如何使用 Swifty JSON 连接两个 json 对象

使用 Swift + Alamofire + Swifty-Json 将动态数据传递给 UIScrollView

swifty json 解析数组对象

Swifty JSON 克隆错误