2016-07-25 6 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) 
    } 
} 

辞書

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 
    } 
} 

私はコードをデバッグするたびに、辞書は常に処理全体が持っている場合でも、nullのオブジェクトにJSONデータを保存する必要があります。この方法終了しました。

答えて

1

JSONデータをNSDataに変換して、JSONではなくNSDataから簡単にデータを取得できます。

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(データ!, オプション:NSJSONReadingOptions.MutableContainers)を! NSDictionary

関連する問題