版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2018.07.10 |
前言
在app中,很多時候都需要熟悉一些小技巧讓您事半功倍,提高工作效率,這些小技巧都很小很細。感興趣的可以看看我寫的其他小技巧。
1. 實用小技巧(一):UIScrollView中上下左右滾動方向的判斷
2. 實用小技巧(二):屏幕橫豎屏的判斷和相關邏輯
3.實用小技巧(三):點擊手勢屏蔽子視圖的響應
4.實用小技巧(四):動態(tài)的增刪標簽視圖
5.實用小技巧(五):通過相冊或者相機更改圖標
6.實用小技巧(六):打印ios里所有字體
7. 實用小技巧(七):UITableViewCell自適應行高的計算
8. 實用小技巧(八):數(shù)字余額顯示的分隔
9.實用小技巧(九):類頭條模糊背景的實現(xiàn)
10.實用小技巧(十):晃動手機換后臺服務器網(wǎng)絡
11.實用小技巧(十一):scrollView及其子類顯示的一些異常處理
12.實用小技巧(十二):頭像圖片縮放以及保存到相冊簡單功能的實現(xiàn)
13.實用小技巧(十三):一種類酷我音樂盒動畫實現(xiàn)
14.實用小技巧(十四):生成跳往applestore指定app的方法
15.實用小技巧(十五):左側向右滑動返回上一級控制器
16.實用小技巧(十六):獲取設備信息
17.實用小技巧(十七):清除緩存目錄
18.實用小技巧(十八):取出gif圖的每一幀
19.實用小技巧(十九):獲取相機和麥克風權限
20.實用小技巧(二十):游客模式的實現(xiàn)
21.實用小技巧(二十一):版本檢測的實現(xiàn)
22.實用小技巧(二十二):鍵盤遮擋問題
23. 實用小技巧(二十三):獲取閃光燈的控制
24. 實用小技巧(二十四):APP頁面開啟跳轉邏輯處理
25. 實用小技巧(二十五)—— 關于UILabel控件寬高的計算
26. 實用小技巧(二十六)—— APP中各種權限監(jiān)測和申請工具封裝
27. 實用小技巧(二十七)—— 控制器跳轉邏輯的封裝
28. 實用小技巧(二十八)—— 一種字符串的遍歷方式
29. 實用小技巧(二十九)—— 漢字的判斷以及計數(shù)
30. 實用小技巧(三十)—— 數(shù)字的判斷以及計數(shù)
31. 實用小技巧(三十一)—— 版本監(jiān)測工具的封裝
32. 實用小技巧(三十二)—— 項目中代碼行數(shù)統(tǒng)計
應用場景
很多時候我們從服務端或者前端收到的json字符串,我們需要先轉化為我們可以處理的對象類型,比如將json數(shù)據(jù)類型轉化為NSDictionary的數(shù)據(jù)類型,這樣我們iOS就可以進行后續(xù)的處理。
json和對象之間的轉化工具的封裝
下面我們就看一下一個簡單的json和對象之間的轉化工具的封裝。
1. JJJSONHelp.h
#import <Foundation/Foundation.h>
@interface JJJSONHelp : NSObject
// json data轉dictionary
+ (id)data2NSDictionary:(NSData *)data;
// json NSString轉dictionary
+ (id)string2NSObject:(NSString *)dataStr;
// dictionary轉NSString
+ (id)object2NSString:(NSObject *)data;
//對象轉化為NSData
+ (NSData *)object2NSData:(id)obj;
@end
2. JJJSONHelp.m
#import "JJJSONHelp.h"
@implementation JJJSONHelp
// json data轉dictionary
+ (id)data2NSDictionary:(NSData *)data
{
__autoreleasing NSError* error = nil;
if (!data) { //如果data是nil,調用NSJSONSerialization JSONObjectWithData會導致crash
return nil;
}
id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
// json NSString轉dictionary
+ (id)string2NSObject:(NSString *)dataStr
{
if ([dataStr isKindOfClass:[NSDictionary class]]) {
return dataStr;
}
if (dataStr.length == 0)
{
return nil;
}
NSData* data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
if (!data) { //如果data是nil,調用NSJSONSerialization JSONObjectWithData會導致crash
return nil;
}
__autoreleasing NSError* error = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
// dictionary轉NSString
+ (id)object2NSString:(NSObject *)data
{
@try
{
if ([NSJSONSerialization isValidJSONObject:data])
{
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:kNilOptions error:&error];
NSString *json =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
if (error) {
CPLog(@"object2NSString error :%@",error.localizedDescription);
}
return json;
}
return nil;
} @catch (NSException *exception) {
return nil;
}
}
//對象轉化為NSData
+ (NSData *)object2NSData:(id)obj{
if ([NSJSONSerialization isValidJSONObject:obj])
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:obj options:NSJSONWritingPrettyPrinted error:&error];
return jsonData;
}
return nil;
}
@end
簡單示例
下面看一下一個簡單示例,json數(shù)據(jù)來自于H5前端。
- (void)onJsCallback:(NSString *)json
{
id jsonObj = [JJJSONHelp string2NSObject:json];
if ([jsonObj isKindOfClass: [NSDictionary class]]) {
NSDictionary *dict = (NSDictionary *)jsonObj;
}
}
下面看一下轉化前的json數(shù)據(jù)
Printing description of json:
{"action":"toFullPage","data":{"url":"http://www.xxxxx.com/moblie/index.html#/room/10000356/buyGuard","more":{"name":"守護特權","type":"web","data":"http://www.xxxxx.com/moblie/index.html#/room/10000356/guardPrivilege"}}}
下面就是JJJSONHelp轉化后的字典對象
Printing description of dict:
{
action = "toFullPage",
data = {
url = "http://www.xxxxx.com/moblie/index.html#/room/10000356/buyGuard",
more = {
name = "守護特權",
type = "web",
data = "http://www.xxxxx.com/moblie/index.html#/room/10000356/guardPrivilege",
},
},
}
這樣就實現(xiàn)了json數(shù)據(jù)和iOS字典對象的轉化。
后記
本篇主要講述了一個簡單的json和對象之間的轉化工具的封裝,感興趣的給個贊或者關注~~~~~
