美文网首页
iOS开发:JSON解析遇到特殊字符处理方法

iOS开发:JSON解析遇到特殊字符处理方法

作者: Pulan | 来源:发表于2018-03-15 15:01 被阅读0次

    特殊情况下服务端返回的JSON数据会包含制表符(\t)、换行符(\r)、回车(\n),这样的JSON数据直接解析会出错。

     Domain=NSCocoaErrorDomain Code=3840 "Unescaped control character around character ***
    

    1. 出错的原因

    个人认为因为转义字符是特殊符号,既不是ASCII,又是固定格式不能进行编码,所以NSJSONSerialization不能处理转义字符。

    2. 解决方案

    根据使用场景有不同的处理方式

    • 不需要显示格式时
      直接遍历字符串,找到转义字符,删除掉。

    • 需要在页面中用到换行、制表符等格式时
      同样遍历字符串,找到转义字符,加反斜杠。

    3. Demo代码

    - (NSData*)washResponseData:(NSData *)data
    {
        NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSMutableString *jsonString = [NSMutableString stringWithString:responseString];
        NSString *character = nil;
        for (int i = 0; i < jsonString.length; i ++) {
            character = [jsonString substringWithRange:NSMakeRange(i, 1)];
            //只判断常见的转义字符,有需求可以再加
            if ([character isEqualToString:@"\t"] || [character isEqualToString:@"\n"] || [character isEqualToString:@"\r"]) {
                //方案1
                [jsonString deleteCharactersInRange:NSMakeRange(i, 1)];
                //方案2
                //NSString *replaceString = [NSString stringWithFormat:@"\\%@",character];
                //[jsonString replaceCharactersInRange:NSMakeRange(i, 1) withString:replaceString];
            }
        }
        return [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    }
    

    相关文章

      网友评论

          本文标题:iOS开发:JSON解析遇到特殊字符处理方法

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