我从服务器得到了json响应:
"{\"userID\":\"dkjagfhaghdalgalg\"}"
我尝试用这个获取用户ID:
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
(data, response, error) -> Void in
if let unwrappedData = data {
do {
let userIDDictionary:NSDictionary = try NSJSONSerialization.JSONObjectWithData(unwrappedData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
print("userIDDictionary:\(userIDDictionary)")
//let userID:String = userIDDictionary["userID"] as! String
//print("userID:\(userID)")
print("data:\(data)")
print("response:\(response)")
print("error:\(error)")
} catch {
print("Failed to get userID: \(error)")
}
}
}
但回复是
无法获取userID:错误域= NSCocoaErrorDomain代码= 3840" JSON文本未以数组或对象开头,并且选项允许未设置片段。 UserInfo = {NSDebugDescription = JSON文本不以数组或对象开头,并且选项允许未设置片段。}"。
如何获得带有json响应的userID?
更新:我尝试使用anyobject,但仍然没有将json字符串更改为字典。
let bodyStr = "test={ \"email\" : \"\(username)\", \"password\" : \"\(password)\" }"
let myURL = NSURL(string: Constant.getSignInEmail())!
let request = NSMutableURLRequest(URL: myURL)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.HTTPBody = bodyStr.dataUsingEncoding(NSUTF8StringEncoding)!
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
(data, response, error) -> Void in
if let unwrappedData = data {
do {
let json:AnyObject! = try NSJSONSerialization.JSONObjectWithData(unwrappedData, options: NSJSONReadingOptions.MutableContainers) as! AnyObject
print("json:\(json)")
//let userID:String = userIDDictionary["userID"] as! String
//print("userID:\(userID)")
} catch {
print("Failed to get userID: \(error)")
}
}
}
答案 0 :(得分:0)
你可以通过两种方式解决。
使用字符串(数据:,编码:.utf8)
然后使用缩小'\'
格式化字符串文件然后再次将其转换为NSData类型,然后调用JSONSerialization。
答案 1 :(得分:0)
我认为这是您收到的数据与其显示方式之间存在混淆的情况。无论是在您身边,还是在服务器端。尝试告诉我们完全服务器正在发送什么,逐字节。
你得到的是一个包含JSON的字符串。不是JSON,而是包含JSON的字符串。哪个不一样。就像一瓶啤酒不是用啤酒制成的,而是用玻璃制成的。
如果这确实是你收到的,那么你应该首先踢那些写服务器代码的人。如果这没有帮助,那么请阅读“片段”选项的作用;这将为您提供一个字符串,然后您提取字节,并将字节抛出到JSON解析器中。
答案 2 :(得分:0)
尝试使用json阅读选项中的NSJSONReadingOptions.AllowFragments
答案 3 :(得分:-1)
实际上这是NSASCIIStringEncoding。
为了获得帮助,我创建了一个程序。
请复制/粘贴并运行它。你会找到答案。
import Foundation
let string = "{\"userID\":\"dkjagfhaghdalgalg\"}"
let unwrappedData: NSData = string.dataUsingEncoding(NSASCIIStringEncoding)!
do {
let userIDDictionary:NSDictionary = try NSJSONSerialization.JSONObjectWithData(unwrappedData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
let userid = userIDDictionary.valueForKey("userID")
print("userid:\(userid!)")
} catch {
print("Failed to get userID: \(error)")
}