美文网首页
iOS NSLog 打印完整的JSON字符串

iOS NSLog 打印完整的JSON字符串

作者: ZT_Story | 来源:发表于2020-03-10 16:39 被阅读0次

    前言

    在封装网络请求框架时,打印请求结果发现日志输出不全,到一定的字符就会被截断
    开始猜测NSLog是否日志输出有字符上限

    尝试

    NSLog(@"【请求结果】: \n%@", obj);
    

    实际只能输出大约1000左右的字符,尤其是转成JSON字符串之后,只能显示很少的一部分

    NSLog(@"%@", [obj debugDescription]);
    

    输出结果多了不少,但是在数据量大的时候仍然展示不全

    NSLog(@"%s", [obj debugDescription].UTF8String);
    

    这种方式打印结果与第二种差不多,同样的位置截断,日志末尾会有<…>省略符号
    应该是NSLog日志显示长度达到上限了,做的折中处理


    查看资料有说用printf

    #define NSLog(format,...) printf("%s",[[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String])
    

    这种方式可以输出完整的字符串,但是毕竟是整个替换了NSLog,少了原本NSLog宏的一些内置定义,导致日志结构不美观,需要自己补充

    总结

    不过即便如此,第二种和第三种依然可以显示相当长的字符串内容,对于一般的列表JSON数据完全足够,如果真的需要显示大量数据可以尝试第四种方式

    补充

    关于OC的一些预处理宏,这些都能很好的帮助我们完善日志内容

    Macro Format Specifier Description
    __func__ %s 打印当前函数名
    __LINE__ %d 行号
    __FILE__ %s 文件完整路径

    附格式化NSDictionary与NSArray的方法

        NSString *logString;
        @try {
            logString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];
            // 处理\/转义字符
            logString = [logString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"]; 
        } @catch (NSException *exception) {
            logString = self.description;
        } @finally {
            
        }
        return  logString;
    

    相关文章

      网友评论

          本文标题:iOS NSLog 打印完整的JSON字符串

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