版權歸Aaidong所有〜轉載需聲明〜 原貼地地址:http://blog.csdn.net/aaidong/article/details/53043938
本來我客戶端網絡請求用的AFNetworking,默認
manager.responseSerializer = [AFJSONResponseSerializer serializer];//設置返回數據爲json
一直數據解析沒出過問題,但是突然有兩個接口服務器直接返回了字符串,對就是字符串,然後我這邊就悲劇了
error = Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
於是就將
manager.responseSerializer = [AFHTTPResponseSerializer serializer];//設置返回數據爲NSData
/**
* 將未知的數據類型 轉成 OC 的NSDictionary、NSArray、NSString、nil(未識別)
*/
+ (id )resultsWithResponseObject:(id)json {
if (!json || json == (id)kCFNull) {
NSLog(@"原數據爲nil,返回nil");
return nil;
}
NSData *jsonData = nil;
id jsonResults = nil;
if ([json isKindOfClass:[NSDictionary class]]) {
NSLog(@"返回原字典");
} else if ([json isKindOfClass:[NSArray class]]) {
NSLog(@"返回原數組");
} else if ([json isKindOfClass:[NSString class]]) {
jsonData = [(NSString *)json dataUsingEncoding : NSUTF8StringEncoding];
} else if ([json isKindOfClass:[NSData class]]) {
jsonData = json;
}
if (jsonData) {
jsonResults = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:NULL];
if ([jsonResults isKindOfClass:[NSDictionary class]]) {
NSLog(@"JSON數據返回字典");
} else if ([jsonResults isKindOfClass:[NSArray class]]) {
NSLog(@"JSON數據返回數組");
} else if ([jsonResults isKindOfClass:[NSString class]]) {
NSLog(@"JSON數據返回字符串");
} else if (jsonResults == nil && [json isKindOfClass:[NSString class]]) {
NSLog(@"返回原字符串");
return json;
} else if (jsonResults == nil && [json isKindOfClass:[NSData class]]) {
// 不是數組,不是字典,還不是字符串嗎?
NSString *string = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];
return string;
} else {
// 未識別
NSLog(@"未識別防止解析報錯,原數據返回nil");
NSLog(@"未識別原數據:%@",json);
return nil;
}
return jsonResults;
}
return json;
}
sessionTask = [manager POST:url parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
responseObject = [self resultsWithResponseObject:responseObject];
DLog(@"post請求成功 = %@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
DLog(@"error = %@",error);
}];
log打印: post請求成功 = %24x%5E%7B2%7D%2By%5E%7B2%7D%3D1%24