如何在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()
}
答
问题解决。解决方案是
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 {
}
的可能的复制[如何解析斯威夫特解析的JSON内的阵列?](http://stackoverflow.com/questions/24026305/how-do-i-parse -an-array-inside-parsed-json-in-swift) –
显示你的代码是如何设法获得sessionId的。获取DisplayName应该非常相似 – Fonix
[如何将JSON字符串转换为字典?](http://stackoverflow.com/questions/30480672/how-to-convert-a-json-string-to -a-dictionary) – 4oby