2016-04-26 19 views
-3
{"response":{"success":true,"access_token":"z5zbXVfaD4xOyTCLOwLIBPvuEYw7lQCUWb5U7l4KpCyXvbJkHv2jkyOZwk6RbJM7VS12d5NDImBeykygPBAa9o9FJgxUZk1Uc2Xp","access_level":"1"}} 

レスポンスを個別に解析するにはどうすればよいですか?すべてのオブジェクトを別々の変数に入れたいと思います。私のコード:Swiftで次のJSONを解析する方法は?

var reponseError: NSError? 
     var response: NSURLResponse? 
     var urlData: NSData? 


     do { 
      urlData = try? NSURLConnection.sendSynchronousRequest(request, returningResponse:&response) 
     } 
     catch(let e) { 
      print(e) 
     } 

     if (urlData != nil) { 
      let res = response as! NSHTTPURLResponse!; 

      NSLog("Response code: %ld", res.statusCode); 

      if (res.statusCode >= 200 && res.statusCode < 300) 
      { 
       var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! 

       NSLog("Response ==> %@", responseData); 
+0

は、任意のモデルクラスを作成したか、ロジックを解析することがありますか? – UditS

+0

「responseData」のデータを解析するにはどうすればよいですか? – Rashed

答えて

1

解析し、単純なJSONのためにあなたがNSJSONSerialization

var decodedJson : AnyObject 
do { 
    decodedJson = try NSJSONSerialization.JSONObjectWithData(urlData!, options: .MutableContainers) 
} 
catch (let e) { 
    //Error in parsing 
    print(e) 
} 

は、この応答JSONのすべてのキー/値のペアと辞書を返します使用することができます。この辞書を使用するだけで、必要なキーの価値を得ることができます。

しかし、より良いアプローチは、応答のためのモデルクラスを作成することです。

は、あなたのケースでは、それはようなものになることがあります。そして、あなたがResponseModelオブジェクトを作成するために、コードを更新することができます

class ResponseModel { 

    var success : Bool? 
    var accessToken : String? 
    var accessLevel : Int? 

    init(dictionary : NSDictionary) { 

     if let successValue = dictionary["success"] as? Bool { 
      success = successValue 
     } 
     if let accessTokenValue = dictionary["access_token"] as? String{ 
      accessToken = accessTokenValue 
     } 
     if let accessTokenValue = dictionary["access_level"] as? Int{ 
      accessLevel = accessTokenValue 
     } 
    } 
} 

if (res.statusCode >= 200 && res.statusCode < 300) 
{ 
    var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! 

    NSLog("Response ==> %@", responseData); 

    //JSON serialization 
    var decodedJsonResponse : NSDictionary? 
    do { 

     decodedJsonResponse = try NSJSONSerialization.JSONObjectWithData(urlData!, options: .MutableContainers) as? NSDictionary 
    } 
    catch (let e) { 
     //Error in parsing 
     print(e) 
    } 

    //Use JSON response dictionary to initialize the model object 
    if let decodedJson = decodedJsonResponse?["response"] as? NSDictionary { 
     let responseObject = ResponseModel(dictionary: decodedJson) 

     //use responseObject as required 
     print(responseObject) 
    } 
} 
+0

また、[SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON)をチェックアウトすることもできます。これは、SwiftのJSONシリアル化をうまく処理します。 – UditS

関連する問題