一般方式解析代碼如下
?NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
解析結(jié)果dict為nil,后來打印了data的類型為NSInlineData
NSInlineData怎樣處理,網(wǎng)上搜到的方式,很多都是按照下面方法改
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer=[AFJSONResponseSerializer new];//AFHTTPResponseSerializer換成了AFJSONResponseSerializer
manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObjects:@"application/json",@"text/html",@"text/javascript",@"text/json",@"text/plain",nil];
但是改后請求直接失敗
失敗的error信息如下
Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 76." UserInfo={NSDebugDescription=Unable to convert data to string around character 74.}
后來查到這個問題原因一般是response的編碼問題
最終解決辦法,請求依舊如下設(shè)置
AFHTTPSessionManager *manager =?[AFHTTPResponseSerializer serializer];
manager.responseSerializer=[AFHTTPResponseSerializer ? new];
manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObjects:@"application/json",@"text/html",@"text/javascript",@"text/json",@"text/plain",nil];
解析結(jié)果用如下方法
NSStringEncoding enc = kCFStringEncodingUTF8;
NSString *strdata = [[NSString alloc]initWithData:responseData encoding:enc];
解析出了最終的結(jié)果,但是strdata中的漢字亂碼,后來查看請求里header編碼格式是Content-Type?→application/json;charset=GBK
最終改為
? ? NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *strdata = [[NSString alloc]initWithData:responseData encoding:enc];
完美解決問題