美文网首页
ios json解析失败:Error Domain=NSCoco

ios json解析失败:Error Domain=NSCoco

作者: 我在鄱阳湖边 | 来源:发表于2017-08-02 14:18 被阅读334次

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

          本文链接:https://www.haomeiwen.com/subject/xknelxtx.html