如何在Swift中解析JSON数组?

如何在Swift中解析JSON数组?

问题描述:

我是Swift的初学者。我试图在Swift中做一个http请求。如何在Swift中解析JSON数组?

我成功地做到了,但我无法解析回应。我在这方面搜索了很多,但找不到任何东西。

这是我的一段代码。

上面的代码的输出是:

{ 

    Login =  { 

     AccountType = Pro; 
     FileSizeLimit = 157286400; 
     PasswordHash = fc27a61bc3dda36ebe28887d4da16df2093bbbcd8d58cfc87b2b48b70801c411; 

     Session =   { 
      id = ca77dd997db2169908a1a84204c99ae7; 
     }; 

     SmugVault = 0; 

     User =   { 
      DisplayName = "smug"; 
      NickName = better1; 
      id = 2455641; 
     }; 

    }; 
    method = "smugmug.login.withPassword"; 
    stat = ok; 

} 

我想要得到的显示名称。我能够提取sessionId,但没有名称。请帮我解决一下这个。

娄是代码

FUNC postDataToURL(){

let userName = self.userName.text; 
    let userPassword = self.password.text; 

    let postUrl = NSURL(string: "http://api.smugmug.com/hack/json/1.2.0/?method=smugmug.login.withPassword")! 

    let smugUrlRequest = NSMutableURLRequest(URL: postUrl) 

    smugUrlRequest.HTTPMethod = "POST" 

    let postString = "&EmailAddress=" + userName! + "&Password=" + userPassword! + "&APIKey=1WcKTxQH2fegQTF0C7cVAORjeoTSD68V" 

    smugUrlRequest.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

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

     if error != nil { 
      print("error=\(error)") 
      print("ERROR") 
     } 

     if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {   // check for http errors 
      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print("response = \(response)") 
     } 

     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 

     do { 
      if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary { 
       if let stat = json["method"] as? String { 
        print(stat) // London 
       } 

       print(json) 

       let user = json["Login"]! 
       let FileSizeLimit = user["FileSizeLimit"] 
       print(FileSizeLimit) 

       let PasswordHash = user["PasswordHash"] 
       print(PasswordHash) 

       let Session = user["Session"] 
       print(Session) 

       let DisplayName = user["User"] 
       print(DisplayName) 


      } 
     } catch let error as NSError{ 
      print("\(error)") 
     } 


    } 
    task.resume() 
} 
+3

的可能的复制[如何解析斯威夫特解析的JSON内的阵列?](http://stackoverflow.com/questions/24026305/how-do-i-parse -an-array-inside-parsed-json-in-swift) –

+0

显示你的代码是如何设法获得sessionId的。获取DisplayName应该非常相似 – Fonix

+0

[如何将JSON字符串转换为字典?](http://stackoverflow.com/questions/30480672/how-to-convert-a-json-string-to -a-dictionary) – 4oby

问题解决。解决方案是

let jsonData = try NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMappedIfSafe) 
      do { 
       let jsonResult: NSDictionary = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 
       print("jsonResult : ",jsonResult) 
       print("Session : ",jsonResult.valueForKey("Login")?.valueForKey("Session")) 
       print("DisplayName : ",(jsonResult.valueForKey("Login")?.valueForKey("User")?.valueForKey("DisplayName"))!) 

      } catch { 

}