一.前言
說到JSON資料NSLog輸出,大家可能並不陌生,在向伺服器資料請求時,會經常用到,但Xcode的JSON輸出並不怎麼美麗,
- 1.欄位""缺失
- 2.陣列輸出為( )
- 3.unicode編碼中文沒有自動顯示為中文
- 4.大部分情況下copy列印的JSON資料到JSON線上格式化工具,都報錯,格式化不了
-
5.其實有些第三方外掛也可以解決這個問題,現在給大家分享一個比較簡單的解決方法,幾行程式碼的擴充套件就可以解決這個問題. 複製程式碼
二.先看效果
1.Xocde JSON資料正常NSLog輸出,和copy到JOSN線上格式化工具情況如下:
2.新增擴充套件後.NSLog輸出和JSON資料格式化效果如下
3.效果很明顯了:
- 1.自動補全欄位缺失""
- 2.自動轉換陣列( )為[ ]
- 3.自動轉換unicode編碼為中文
- 4.能正常進行JSON資料格式化
-
5.自動轉換,NSLog不用新增任何更改. 複製程式碼
三.好了,不多說,直接上程式碼
1.新建一個NSdictionasy 的Category,筆者取名為NSDictionary+XHLogHelper,如下:
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/…