總結(jié)一個(gè)工作中遇到的坑。后端返回的JSON明明是成功藕溅,但是始終被解析為錯(cuò)誤棚壁,并返回3840錯(cuò)誤。這個(gè)錯(cuò)誤通常是因?yàn)榉祷氐臄?shù)據(jù)格式不正確栈虚,但是抓包顯示的確是JSON串袖外,但是在JSON串之前有15行是空白的!;晡瘛B椤!
開(kāi)始認(rèn)為是后端數(shù)據(jù)的問(wèn)題粘姜,跟后端哥們調(diào)試了6個(gè)小時(shí)無(wú)果鬓照,最后還是得前端自己解決。第一個(gè)想法就是將返回的JSON文本去首尾空行空格再進(jìn)行序列化孤紧。于是豺裆,在失敗的block中拿到請(qǐng)求結(jié)果的字符串
NSString *responseStr = operation.responseString;
這個(gè)opertion變量來(lái)自AFN框架的下面這個(gè)方法
- (AFHTTPRequestOperation *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure];
[self.operationQueue addOperation:operation];
return operation;
}
通過(guò)下面這個(gè)方法過(guò)濾字符串中的換行和空格(感謝woaifen3344)
- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) {
return nil;
}
jsonString = [jsonString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
NSLog(@"json解析失敗:%@",err);
return nil;
}
return dic;
}
通過(guò)這個(gè)方法返回的就是正常解析的OC字典了,ru guo