2016-07-25 67 views
0

我能夠在控制檯看起來像這樣如何使用Swifty Json將POST請求中的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" : "[email protected]", 
    "fname" : "PB" 
} 

打印JSON數據,但不能將其保存到字典中。

的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 

希望它能幫助。

-1

let jsonDictionary = Try! NSJSONSerialization.JSONObjectWithData(data !, options:NSJSONReadingOptions.MutableContainers)as! NSDictionary

相關問題