在一个项目中同时有JAVA后台接口和PHP后台接口,我使用了两套网络请求框架,一套是原生的用来请求JAVA后台数据,一套是使用的PPNetworkhelper用来请求PHP接口数据,可以应对项目所需。
在进行测试的时候发现一个问题,在iPhone 5s上能够正常请求JAVA后台数据,在iPhone 6s Plus上则出现了json数据解析错误,真的是没有想到,错误信息:Error Domain=NSCocoaErrorDomain Code=3840 "No value."。这个错误我前面在第一次接JAVA接口的时候已经碰到过,是因为无法正常解析JAVA后台返回的json数据导致的,为什么不能解析数据,我和后台大胸弟一起研究了一下打印出来的数据,使用在线json解析工具也不能解析出来。可以确定肯定是数据格式出问题了,发现在拼接数据的时候错误。
数据里包含 \n \r \t 等制表符,或者单引号'',等特俗符号都会引起解析错误,所以需要把数据中的特俗符号都过滤掉。
NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //去除掉首尾的空白字符和换行字符
str = [str stringByReplacingOccurrencesOfString:@"\r" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"\\" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"\''" withString:@""""];
NSDictionary *mydic = [weakself dictionaryWithJsonString:str];
- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) {
return nil;
}
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;
}