iOS Swift Json序列化在字符串上中断并返回

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

如果我返回带有/不带空格的“test”,它会工作。但是,当我返回一个用户使用返回值存储在字符串中的值时,它会失败,并出现一个nil错误,但是当我查看NSLog时,该值就在那里

故障前编码

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