在一個項目中同時有JAVA后臺接口和PHP后臺接口,我使用了兩套網(wǎng)絡(luò)請求框架,一套是原生的用來請求JAVA后臺數(shù)據(jù),一套是使用的PPNetworkhelper用來請求PHP接口數(shù)據(jù),可以應(yīng)對項目所需。
在進行測試的時候發(fā)現(xiàn)一個問題,在iPhone 5s上能夠正常請求JAVA后臺數(shù)據(jù),在iPhone 6s Plus上則出現(xiàn)了json數(shù)據(jù)解析錯誤,真的是沒有想到,錯誤信息:Error Domain=NSCocoaErrorDomain Code=3840 "No value."。這個錯誤我前面在第一次接JAVA接口的時候已經(jīng)碰到過,是因為無法正常解析JAVA后臺返回的json數(shù)據(jù)導(dǎo)致的,為什么不能解析數(shù)據(jù),我和后臺大胸弟一起研究了一下打印出來的數(shù)據(jù),使用在線json解析工具也不能解析出來??梢源_定肯定是數(shù)據(jù)格式出問題了,發(fā)現(xiàn)在拼接數(shù)據(jù)的時候錯誤。
數(shù)據(jù)里包含 \n \r \t 等制表符,或者單引號'',等特俗符號都會引起解析錯誤,所以需要把數(shù)據(jù)中的特俗符號都過濾掉。
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;
}