iOS开发---解析json出错 NSCocoaErrorDomain Code=3840

最近线上版本发现一个页面无法正常显示数据,经过排查,定位到是接口返回的json有问题,导致无法正确解析。

解决办法:

先正常解析,之后,判断是否出错,如果出错,删除特殊字符后,再次解析

1 问题描述:
返回json事例:

{"title":"123","its":"1232  324534  sdfsd "}

2 错误代码以及复原
解析json的方法:

NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                    options:NSJSONReadingMutableContainers
                                                      error:&err];

报错:Error Domain=NSCocoaErrorDomain Code=3840 "Unescaped control character around character XXX."
3 解决方法,在解析一次之后,判断是否出错,如果出错,删除特殊字符后,再次解析

if(err) {
    NSLog(@"%@",err);
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    jsonString = [self removeUnescapedCharacter:jsonString];
    jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    err = nil;
    dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                          options:NSJSONReadingMutableContainers
                                            error:&err];
}

-(NSString *)removeUnescapedCharacter:(NSString *)inputStr
{
 NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet];//获取那些特殊字符
NSRange range = [inputStr rangeOfCharacterFromSet:controlChars];//寻找字符串中有没有这些特殊字符
if (range.location != NSNotFound)
{
    NSMutableString *mutable = [NSMutableString stringWithString:inputStr];
    while (range.location != NSNotFound)
    {
        [mutable deleteCharactersInRange:range];//去掉这些特殊字符
        range = [mutable rangeOfCharacterFromSet:controlChars];
    }
    return mutable;
}
return inputStr;
}

本文借鉴其他人的处理方法,仅作为记录使用,如有侵权,请联系本人删除!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,451评论 0 9
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,513评论 0 13
  • JSON的特点: 1、JSON比XML的数据传递的有效性高;2、JSON完全独立于编程语言;3、JSON的本质是具...
    程序员之路阅读 3,564评论 0 3
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,342评论 0 3
  • 文 谢西九 西皮流水板轻起,电视里的戏角把词唱:“苏三离了洪洞县,将身来在大街前。未曾开言我心内惨,过往的君子听我...
    谢西九阅读 2,225评论 38 94