2015-06-20 1 views
-2

Я разрабатываю функцию, которая получает некоторый JSON после вызова NSURLRequest в Swift. У меня возникают проблемы с доступом к различным значениям данных с индексом после того, как я проанализировал результат.swift json type data parsing после получения данных


Ниже извлеченный JSON:

{"retCode":100,"retMsg":"Success","retData":{"usn":92,"id":"[email protected]","nickname":"ppigimi","profile_image":"..\/upload\/profile\/20150528172839.jpeg","language":"jp","join_channel_nm":"korfolk","cert_key":"696D6FB453DC141E5295E9D8E37B8DD0F1AFC8E34CE30B74551ED74A447AC564","cert_flag":"Y","join_date":"20150518155650","token":"3ea0a5fec1b55a5a23b5f1dc5c14b040dcd71eea"}} 

Ниже мой код. Я не знаю, как получить значения usn и token внутри retData.

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
    data, response, error in 

    if error != nil { 
     println("error=\(error)") 
     return 
    } 

    // You can print out response object 
    println("response = \(response)") 

    // Print out response body 
    let responseString = NSString(data: data, encoding: NSUTF8StringEncoding) 
    println("responseString = \(responseString)") 

    //Let's convert response sent from a server side script to a NSDictionary object: 

    var err: NSError? 
    var myJSON = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSDictionary 


    if let parseJSON = myJSON as? [String: AnyObject] { 
     // Now we can access value of First Name by its key 
     var retCode = parseJSON["retCode"] as? Int 
     println("retCode: \(retCode)") 

     if let retData = parseJSON["retData"] as? [AnyObject] { 
      for data in retData { 
       /**let usn = data["usn"] 

       println("USN = \(usn)")**/ 
      } 
     } 

     if retCode == 100 { 
      //NSUserDefaults.standardUserDefaults().setValue("usn", forKey: String) 
     } 

     dispatch_async(dispatch_get_main_queue(), { 
      var myAlert = UIAlertController(title: "Alert", message: "AAAAAA", preferredStyle: UIAlertControllerStyle.Alert); 

      let okAction = UIAlertAction(title: "OK", style:UIAlertActionStyle.Default) { 
       action in 
       self.dismissViewControllerAnimated(true, completion: nil); 
      } 

      myAlert.addAction(okAction); 
      self.presentViewController(myAlert, animated: true, completion: nil); 
     }); 
    }  
} 

task.resume() 

ответ

0

Проблема заключается в том, что вы обращаетесь к retCode как [AnyObject]. Это не Array, а фактически объект JSON. Вам нужно будет отправить его на Dictionay, например [String : AnyObject].

Это означает, что ваш for цикл, где вы доступ к данным может выглядеть следующим образом:

if let retData = parseJSON["retData"] as? [String : AnyObject] { 
    for data in retData { 
     println("data is: \(data)") 
     /**let usn = data["usn"] 
     println("USN = \(usn)")**/ 
    } 
} 
+0

Если мой ответ на ваш вопрос был полезным и выполнения, то, пожалуйста, примите его как ответ на ваш чтобы указать другим пользователям, что ваша проблема решена :) http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Kumuluzz