ios json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 "No value."

在一个项目中同时有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;

}

你可能感兴趣的:(ios json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 "No value.")