在一個項目中同時有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;
}