實用小技巧(三十三)—— json和對象之間的轉化工具的封裝(一)

版本記錄

版本號 時間
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和對象之間的轉化工具的封裝,感興趣的給個贊或者關注~~~~~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • (2016-04-17-Sun 15:10:13) 類似圖層,立體感強
    菜五閱讀 161評論 0 0
  • “陌生的人,請給我一支蘭州?!蔽乙贿吅咧抖〗恪芬贿咟c了一支藍莓爆珠。藍莓清香裹挾著薄荷的冰涼擊喉感奔涌而來,使...
    翎蒼閱讀 478評論 0 1
  • 很久之前就想寫這篇文章了,但一直沒找到合適的心情,現(xiàn)在是下午三點,在高中學校對面的土豆粉店里寫下這篇文章。 剛才回...
    正正好兒O閱讀 778評論 4 3
  • 今天講一講創(chuàng)業(yè)過程中的以身作則到以心作則。 創(chuàng)業(yè)初期為什么需要以身作則? 在創(chuàng)業(yè)初期的時候, 沒有人, 沒有經(jīng)驗,...
    ManateeLazyCat閱讀 1,868評論 6 4

友情鏈接更多精彩內容