iOS JSON資料NSLog小技巧

朱曉輝Allen發表於2018-01-05

一.前言

說到JSON資料NSLog輸出,大家可能並不陌生,在向伺服器資料請求時,會經常用到,但Xcode的JSON輸出並不怎麼美麗,

  • 1.欄位""缺失
  • 2.陣列輸出為( )
  • 3.unicode編碼中文沒有自動顯示為中文
  • 4.大部分情況下copy列印的JSON資料到JSON線上格式化工具,都報錯,格式化不了
  •  5.其實有些第三方外掛也可以解決這個問題,現在給大家分享一個比較簡單的解決方法,幾行程式碼的擴充套件就可以解決這個問題.
    複製程式碼

二.先看效果

1.Xocde JSON資料正常NSLog輸出,和copy到JOSN線上格式化工具情況如下:

image

2.新增擴充套件後.NSLog輸出和JSON資料格式化效果如下

image

3.效果很明顯了:

  • 1.自動補全欄位缺失""
  • 2.自動轉換陣列( )為[ ]
  • 3.自動轉換unicode編碼為中文
  • 4.能正常進行JSON資料格式化
  •  5.自動轉換,NSLog不用新增任何更改.
    複製程式碼

三.好了,不多說,直接上程式碼

1.新建一個NSdictionasy 的Category,筆者取名為NSDictionary+XHLogHelper,如下:

image
image

2.開啟 NSDictionary+XHLogHelper.m 檔案,新增程式碼如下:
#import "NSDictionary+XHLogHelper.h"

@implementation NSDictionary (XHLogHelper)

#if DEBUG
- (NSString *)descriptionWithLocale:(nullable id)locale{

  NSString *logString;

    @try {

        logString=[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];

    } @catch (NSException *exception) {

        NSString *reason = [NSString stringWithFormat:@"reason:%@",exception.reason];
        logString = [NSString stringWithFormat:@"轉換失敗:\n%@,\n轉換終止,輸出如下:\n%@",reason,self.description];
   
 } @finally {
 
    }
        return logString;
}
#endif

@end

複製程式碼
3.大功告成了
  • 上面程式碼作用是,DEBUG模式下,NSLog輸出字典時,轉換為JSON字串的形式輸出,轉換失敗,按原始資料輸出,- (NSString *)descriptionWithLocale:(nullable id)locale方法我就不解釋了,有興趣同學可百度瞭解下.
  • 此方法轉JSON字典不會出現失敗情況,什麼情況下會轉換失敗按原始資料輸出呢(比如自定義字典鍵值對中有NSData,NSDate等型別資料)
  • 現在你可以在工程任何一個地方NSLog JSON資料,輸出是不是已經轉換為標準JSON格式了.
4.Tips
  • 專案開發中大家可以自定義一個只在DEBUG模式下才列印DebugLog,所有除錯輸出都用這個列印,可以減少在應用打包上線後,後臺列印造成的效能浪費,程式碼如下:
#ifdef DEBUG
#define DebugLog(...) NSLog(__VA_ARGS__)
#else
#define DebugLog(...)
#endif
複製程式碼

四.小結:

  • 1.此方法很適合NSLog JSON資料,因為可以直接線上格式化,看複雜JSON資料很方便
  • 2.上面程式碼已上傳到了Github,有需要同學可以直接下載,新增到專案中.Github程式碼地址:github.com/CoderZhuXH/…

相關文章