Xcode控制台的格式化输出中文(Unicode)JSON 对象

1,832 阅读2分钟

Xcode控制台的格式化输出中文(Unicode)JSON 对象

直接创建XXXXXX.m 文件拖入项目中即可使用

#import <Foundation/Foundation.h>

\#ifndef Release

@implementation NSSet(Log)



\- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level {

  NSMutableString *desc = [NSMutableString string];

   

  NSMutableString *tabString = [[NSMutableString alloc] initWithCapacity:level];

  for (NSUInteger i = 0; i < level; ++i) {

​    [tabString appendString:@"\t"];

  }

   

  NSString *tab = @"\t";

  if (level > 0) {

​    tab = tabString;

  }

  [desc appendString:@"\t{(\n"];

   

  for (id obj in self) {

​    if ([obj isKindOfClass:[NSDictionary class]]

​      || [obj isKindOfClass:[NSArray class]]

​      || [obj isKindOfClass:[NSSet class]]) {

​      NSString *str = [((NSDictionary *)obj) descriptionWithLocale:locale indent:level + 1];

​      [desc appendFormat:@"%@\t%@,\n", tab, str];

​    } else if ([obj isKindOfClass:[NSString class]]) {

​      [desc appendFormat:@"%@\t\"%@\",\n", tab, obj];

​    } else if ([obj isKindOfClass:[NSData class]]) {

​      // if is NSData,try parse

​      NSError *error = nil;

​      NSObject *result = [NSJSONSerialization JSONObjectWithData:obj

​                                options:NSJSONReadingMutableContainers

​                                 error:&error];

​       

​      if (error == nil && result != nil) {

​        if ([result isKindOfClass:[NSDictionary class]]

​          || [result isKindOfClass:[NSArray class]]

​          || [result isKindOfClass:[NSSet class]]) {

​          NSString *str = [((NSDictionary *)result) descriptionWithLocale:locale indent:level + 1];

​          [desc appendFormat:@"%@\t%@,\n", tab, str];

​        } else if ([obj isKindOfClass:[NSString class]]) {

​          [desc appendFormat:@"%@\t\"%@\",\n", tab, result];

​        }

​      } else {

​        @try {

​          NSString *str = [[NSString alloc] initWithData:obj encoding:NSUTF8StringEncoding];

​          if (str != nil) {

​            [desc appendFormat:@"%@\t\"%@\",\n", tab, str];

​          } else {

​            [desc appendFormat:@"%@\t%@,\n", tab, obj];

​          }

​        }

​        @catch (NSException *exception) {

​          [desc appendFormat:@"%@\t%@,\n", tab, obj];

​        }

​      }

​    } else {

​      [desc appendFormat:@"%@\t%@,\n", tab, obj];

​    }

  }

   

  [desc appendFormat:@"%@)}", tab];

   

  return desc;

}



@end



@implementation NSArray (Log)



\- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level {

  NSMutableString *desc = [NSMutableString string];

   

  NSMutableString *tabString = [[NSMutableString alloc] initWithCapacity:level];

  for (NSUInteger i = 0; i < level; ++i) {

​    [tabString appendString:@"\t"];

  }

   

  NSString *tab = @"";

  if (level > 0) {

​    tab = tabString;

  }

  [desc appendString:@"\t(\n"];

   

  for (id obj in self) {

​    if ([obj isKindOfClass:[NSDictionary class]]

​      || [obj isKindOfClass:[NSArray class]]

​      || [obj isKindOfClass:[NSSet class]]) {

​      NSString *str = [((NSDictionary *)obj) descriptionWithLocale:locale indent:level + 1];

​      [desc appendFormat:@"%@\t%@,\n", tab, str];

​    } else if ([obj isKindOfClass:[NSString class]]) {

​      [desc appendFormat:@"%@\t\"%@\",\n", tab, obj];

​    } else if ([obj isKindOfClass:[NSData class]]) {

​       

​      NSError *error = nil;

​      NSObject *result = [NSJSONSerialization JSONObjectWithData:obj

​                                options:NSJSONReadingMutableContainers

​                                 error:&error];

​       

​      if (error == nil && result != nil) {

​        if ([result isKindOfClass:[NSDictionary class]]

​          || [result isKindOfClass:[NSArray class]]

​          || [result isKindOfClass:[NSSet class]]) {

​          NSString *str = [((NSDictionary *)result) descriptionWithLocale:locale indent:level + 1];

​          [desc appendFormat:@"%@\t%@,\n", tab, str];

​        } else if ([obj isKindOfClass:[NSString class]]) {

​          [desc appendFormat:@"%@\t\"%@\",\n", tab, result];

​        }

​      } else {

​        @try {

​          NSString *str = [[NSString alloc] initWithData:obj encoding:NSUTF8StringEncoding];

​          if (str != nil) {

​            [desc appendFormat:@"%@\t\"%@\",\n", tab, str];

​          } else {

​            [desc appendFormat:@"%@\t%@,\n", tab, obj];

​          }

​        }

​        @catch (NSException *exception) {

​          [desc appendFormat:@"%@\t%@,\n", tab, obj];

​        }

​      }

​    } else {

​      [desc appendFormat:@"%@\t%@,\n", tab, obj];

​    }

  }

   

  [desc appendFormat:@"%@)", tab];

   

  return desc;

}



@end



@implementation NSDictionary (Log)



\- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level {

  NSMutableString *desc = [NSMutableString string];

   

  NSMutableString *tabString = [[NSMutableString alloc] initWithCapacity:level];

  for (NSUInteger i = 0; i < level; ++i) {

​    [tabString appendString:@"\t"];

  }

   

  NSString *tab = @"";

  if (level > 0) {

​    tab = tabString;

  }

   

  [desc appendString:@"\t{\n"];

   

  // Through array, self is array

  for (id key in self.allKeys) {

​    id obj = [self objectForKey:key];

​     

​    if ([obj isKindOfClass:[NSString class]]) {

​      [desc appendFormat:@"%@\t%@ = \"%@\",\n", tab, key, obj];

​    } else if ([obj isKindOfClass:[NSArray class]]

​          || [obj isKindOfClass:[NSDictionary class]]

​          || [obj isKindOfClass:[NSSet class]]) {

​      [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, [obj descriptionWithLocale:locale indent:level + 1]];

​    } else if ([obj isKindOfClass:[NSData class]]) {

​       

​      NSError *error = nil;

​      NSObject *result = [NSJSONSerialization JSONObjectWithData:obj

​                                options:NSJSONReadingMutableContainers

​                                 error:&error];

​       

​      if (error == nil && result != nil) {

​        if ([result isKindOfClass:[NSDictionary class]]

​          || [result isKindOfClass:[NSArray class]]

​          || [result isKindOfClass:[NSSet class]]) {

​          NSString *str = [((NSDictionary *)result) descriptionWithLocale:locale indent:level + 1];

​          [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, str];

​        } else if ([obj isKindOfClass:[NSString class]]) {

​          [desc appendFormat:@"%@\t%@ = \"%@\",\n", tab, key, result];

​        }

​      } else {

​        @try {

​          NSString *str = [[NSString alloc] initWithData:obj encoding:NSUTF8StringEncoding];

​          if (str != nil) {

​            [desc appendFormat:@"%@\t%@ = \"%@\",\n", tab, key, str];

​          } else {

​            [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, obj];

​          }

​        }

​        @catch (NSException *exception) {

​          [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, obj];

​        }

​      }

​    } else {

​      [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, obj];

​    }

  }

   

  [desc appendFormat:@"%@}", tab];

   

  return desc;

}



@end



\#endif