iOS Swift Json序列化在字符串上中断并返回
如果我返回带有/不带空格的“test”,它会工作。但是,当我返回一个用户使用返回值存储在字符串中的值时,它会失败,并出现一个nil错误,但是当我查看NSLog时,该值就在那里 故障前编码iOS Swift Json序列化在字符串上中断并返回,ios,json,swift,Ios,Json,Swift,如果我返回带有/不带空格的“test”,它会工作。但是,当我返回一个用户使用返回值存储在字符串中的值时,它会失败,并出现一个nil错误,但是当我查看NSLog时,该值就在那里 故障前编码 var url:NSURL = NSURL(string:PassURL)! var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)! var postLength:NSString = String( postD
var url:NSURL = NSURL(string:PassURL)!
var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!
var postLength:NSString = String( postData.length )
var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: NSURLResponse?
var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
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);
var error: NSError?
//FAILS HERE
let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as! NSDictionary
但是这个值不是零
错误
Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unescaped control character around character 41.) UserInfo=0x7f9c9942b050 {NSDebugDescription=Unescaped control character around character 41.})
unscaped字符是返回,我怎么能允许json接受这个呢?既然你不能从URLRequest中发布实际的字符串,我就不能确切地说它有什么问题。但听起来24号和41号字符不符合JSON 我想复习一下。并将其粘贴到:中,这将为您提供更多详细信息。并找出端点返回无效JSON的原因 如果您希望处理返回nil的NSJSONSerialization,只需将其包装在If-let中:
if let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as? NSDictionary {
/* It's a valid JSON object */
} else {
/* It's not a valid JSON object */
}
注意:在json的根目录下有一个数组,这是不可处理的。如果您想处理这个问题,只需展开else If let as?恩萨雷。另外,如果urlData为nil,这将崩溃,因为我们仍在强制展开它
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
或
var error:NSError? = nil
var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options:nil, error: &error) as? NSDictionary
请再加一些core@AshishKakkad只是在失败之前添加了更多代码。之所以会发生这种情况,是因为您的字符串通过解析器返回nil。您能将
urlData
变量作为字符串发布吗?@theMonster我不能发布urldString,但我得到了可选的NSError-------->(错误域=NSCOCAERRORDOMAIN code=3840)“操作无法完成。(Cocoa错误3840。)”(字符24周围未替换的控制字符。)UserInfo=0x7f9c9942b050{NSDebugDescription=字符41周围的未替换控制字符。})尝试使用jsonData:NSDictionary=NSJSONSerialization.JSONObjectWithData(urlData!,选项:nil,错误:&error)as!NSDictionaryth该字符是一个返回。我需要找到一种方法来处理它,有什么建议吗?它们是JSON序列化中解析字符串返回的一种方法吗?还是我的请求不可能通过JSON?如果我的字符串包含一个返回,请允许它,不要将其标记为未转换的字符串我认为您不能通过NSJSONSerialization
。但是,您可以使用字符串函数来查找/替换文本。答案的第二部分起作用,但随后打破了这一点-->让success:NSInteger=jsonData!.valueForKey(“success”)as!NSInteger表示success为零,但值存在
var error:NSError? = nil
var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options:nil, error: &error) as? NSDictionary