1. 程式人生 > >iOS:一鍵Model轉Json或者NSDictionary

iOS:一鍵Model轉Json或者NSDictionary

有些人只會使用model,而不會解析,有時候不能夠清楚的看到層次,很耽誤事,通過封裝的一個類,可以輕鬆實現Model轉Json或者NSDictionary。

使用方法:

這個MyData類用來儲存Model。

#import <Foundation/Foundation.h>

@interface MyData :NSObject

@property (nonatomic,strong)NSString *name;

@property (nonatomic,strong)NSString *nullString;

@property (nonatomic)int age;

@property (nonatomic)BOOL male;

@property (nonatomic,strong)MyData *objProp;

@property (nonatomic,strong)NSArray *arrProp;

@property (nonatomic,strong)NSDictionary *dicProp;

@end

通過MyData建立一個物件,裡面有各種資料型別,包括陣列,字典等

MyData *main = [[MyDataalloc]init];

    main.name =@"sunyuqiang";

    main.age

=23;

   MyData *childOfChild = [[MyDataalloc]init];

    childOfChild.name =@"child of child";

    childOfChild.age = -23;

   MyData *child = [[MyDataalloc]init];

    child.name =@"child";

    child.arrProp =@[@"test",@123, @[@456,@"array in array", childOfChild]];

    main.objProp = child;

    main.dicProp

=@{@"city":@"beijing", @"object": childOfChild};

//輸出Model

NSLog(@"main====%@",main);

使用ModelToJson打印出字典:

//輸出字典

   NSDictionary *dic = [ModelToJsongetObjectData:main];

   NSLog(@"dic==%@", dic);

使用ModelToJson打印出json:

//輸出json

   NSData *jsonData = [ModelToJsongetJSON:mainoptions:NSJSONWritingPrettyPrintederror:nil];

NSString *jsonText = [[NSStringalloc]initWithData:jsonDataencoding:NSUTF8StringEncoding];

   NSLog(@"jsonText===%@", jsonText);

附錄: ModelToJson.h的程式碼:

#import <Foundation/Foundation.h>

@interface ModelToJson :NSObject

//通過物件返回一個NSDictionary,鍵是屬性名稱,值是屬性值。

+ (NSDictionary*)getObjectData:(id)obj;

//getObjectData方法返回的NSDictionary轉化成JSON

+ (NSData*)getJSON:(id)obj options:(NSJSONWritingOptions)options error:(NSError**)error;

//直接通過NSLog輸出getObjectData方法返回的NSDictionary

+ (void)print:(id)obj;

@end


ModelToJson.m的程式碼:

#import "ModelToJson.h"

#import <objc/runtime.h>

@implementation ModelToJson

+ (NSDictionary*)getObjectData:(id)obj

{

NSMutableDictionary *dic = [NSMutableDictionarydictionary];

   unsignedint propsCount;

   objc_property_t *props =class_copyPropertyList([obj class], &propsCount);

   for(int i =0;i < propsCount; i++)

    {

       objc_property_t prop = props[i];

NSString *propName = [NSStringstringWithUTF8String:property_getName(prop)];

       id value = [objvalueForKey:propName];

       if(value ==nil)

        {

            value = [NSNullnull];

        }

       else

        {

            value = [selfgetObjectInternal:value];

        }

        [dicsetObject:valueforKey:propName];

    }

   return dic;

}

+ (void)print:(id)obj

{

   NSLog(@"%@", [selfgetObjectData:obj]);

}

+ (NSData*)getJSON:(id)obj options:(NSJSONWritingOptions)options error:(NSError**)error

{

   return [NSJSONSerializationdataWithJSONObject:[selfgetObjectData:obj]options:options error:error];

}

+ (id)getObjectInternal:(id)obj

{

if([objisKindOfClass:[NSStringclass]]

       || [objisKindOfClass:[NSNumberclass]]

       || [objisKindOfClass:[NSNullclass]])

    {

       return obj;

    }

if([objisKindOfClass:[NSArrayclass]])

    {

       NSArray *objarr = obj;

NSMutableArray *arr = [NSMutableArrayarrayWithCapacity:objarr.count];

       for(int i =0;i < objarr.count; i++)

        {

            [arr setObject:[selfgetObjectInternal:[objarrobjectAtIndex:i]]atIndexedSubscript:i];

        }

       return arr;

    }

if([objisKindOfClass:[NSDictionaryclass]])

    {

       NSDictionary *objdic = obj;

NSMutableDictionary *dic = [NSMutableDictionarydictionaryWithCapacity:[objdiccount]];

       for(NSString *keyin objdic.allKeys)

        {

            [dicsetObject:[selfgetObjectInternal:[objdicobjectForKey:key]] forKey:key];

        }

       return dic;

    }

   return [selfgetObjectData:obj];

}

@end




相關推薦

iOSModelJson或者NSDictionary

有些人只會使用model,而不會解析,有時候不能夠清楚的看到層次,很耽誤事,通過封裝的一個類,可以輕鬆實現Model轉Json或者NSDictionary。 使用方法: 這個MyData類用來儲存Model。 #import <Foundation/Foun

docker-compose入門示例部署 Nginx+Tomcat+Mysql

命令 real 一定的 mes 映射 如果 們的 提前 出現 整體環境配置 整體環境的配置,如果一個一個 Dockerfile 去寫,那麽是相當麻煩的,好在 Docker 有一個名為 Docker-Compose 的工具提供,我們可以使用它一次性完成整體環境的配置: 首先

Red5安裝腳本(Linux&Win)搭建你的直播平臺

代碼托管 播放 有用 try -c serve 一鍵 目錄 all Red5一鍵部署script(Linux&Win):一鍵搭建你的直播平臺 看到bilibili,熊貓TV,鬥魚TV等直播平臺你是不是也很眼紅呢,這裏站長為大夥寫了一個Red5一鍵部署script。

Red5安裝指令碼(Linux&Win)搭建你的直播平臺

Red5一鍵部署script(Linux&Win):一鍵搭建你的直播平臺 看到bilibili,熊貓TV,鬥魚TV等直播平臺你是不是也很眼紅呢,這裡站長為大夥寫了一個Red5一鍵部署script。 Red5供給基於Flash的流媒體服務的一款基於Java的開源流媒體伺服器。它由Java言語編寫,使

谷歌外掛訪問外網

  註冊時輸入如下邀請碼,即可升格為VIP會員 W-QUoj4bUSYLV2Cc 安裝, 使用說明 點選這裡下載外掛(此連結僅在不能登入Google Chrome Store時使用) 第一步: 下載外掛 詳細圖文說明

Python物件json【包括巢狀物件json,django的modeljson

背景: 給app寫介面時經常會遇到將一個model轉為json返回。 問題: 網上也有類似方法,只是搜尋結果多少有些問題,總是搜了好一會兒才找到合適的方法,另外,網上更多集中的只是簡單些的物件,對於複雜的物件,還是不容易找到好的方式。 方案(python3.6): 1

支付寶分站託管教程【附圖】

【分站託管】 我們提供伺服器,域名請自行購買,解析A記錄到分配給你的ip,記錄值填* http://t.cn/E7NCiB0 (註冊完後回到首頁-產品-域名註冊) 支援泛解析(*),每個頂級域名下無限個

一個簡單的shell指令碼部署tomcat及釋出簡單程式指令碼

測試環境中一鍵部署的一個小指令碼,這裡記錄下,方便想聯絡的人進行參考 環境介紹: 作業系統cos7.4 jdk版本:1.8 中介軟體服務版本:tomcat7.0.75 ——————————————以下是指令碼內容—————————————————————————

如何從推廣簡訊連結喚起 App ?這種的方式瞭解一下!

一、需求描述 寫這篇文章,也是緣於運營的一個需求:在 App 運營過程中,會有大量的推廣簡訊,裡面附有連結,目的是引導使用者參與活動。如果使用者手機沒有安裝我們的 App 就引導其去下載頁,如果使用者已經安裝了我們的 App 就直接在 App 中開啟對應的活動。

golang 生成 form,json,gorm標籤

每次有新表產生時,就會有新的model,model編寫完後,繁雜的標籤註解令人煩躁,所以寫了這樣的工具。 func AddJsonFormGormTag(in string) (string) {

npm如何安裝package.json裡的依賴檔案。

原文出處:https://blog.csdn.net/lydia_liuY/article/details/80816267 這裡介紹如何使用npm一鍵安裝package.json裡的dependencies 和devDependencies裡的所有模組。 npm install //預設安

Infura接入以太坊

昨天聽說了Infura這個專案,就花了點時間瞭解了一下。 1.什麼是Infura? 專業一點講,Infura是一種IaaS(Infrastructure as a Service)產品,目的是為了降低訪問以太坊資料的門檻。 通俗一點講,Infura就是一個可以讓你的dApp快

《架構系列四部署應用到Tomcat叢集中》

基於前面的《架構系列三:使用Keepalived+Nginx+tomcat實現叢集部署》,我們配置了nginx+Tomcat叢集,如果需要在VM1,VM2各部署6個Tomcat,這時候怎麼將應用部署到叢集中呢,如果手動一個一個的部署,那要部署12次,效率非常底,因此我們迫切需要一鍵自動部

Androidfind控制元件,從此告別繁瑣的findViewById

記得之前寫過一篇部落格叫做: 此文是介紹在eclipse環境下使用ButterKnife的,相比傳統的findViewById確實簡單了點~但是筆者認為還不夠簡單~~ 在谷歌停止對ADT+Eclipse停止更新之後~筆者還苦苦在Eclipse堅持了幾個月終於開始轉移到An

linux部署神器(附壓縮包)安裝centos 7環境基礎環境,lanmp懶人版,還有tomat等你想不到的linux神器

文章目錄 壓縮包 一、安裝版本指南 二、開始安裝 三、安裝完成 四、安裝虛擬環境 壓縮包 http://mirrors.linuxeye.com/oneinstack-full.tar.gz 一、安裝版本指南 可選擇

七牛篇玩七牛CDN時間戳防盜鏈———python版

文章目錄 前言 一、七牛portal配置 二、使用python生成時間戳防盜鏈url 三、完成 前言 七牛文件配置時間戳防盜鏈較為複雜,這裡專門寫一份簡單版卻五臟俱全的小白文件,旨在交流,同時學習。 Github地址:https:

手機遠端控制Mac實現iOS APP打包上傳

聽起來有點ridiculous哈~ 不談業務場景,就說說功能實現~ 需要解決兩個問題: 手機怎麼就能控制電腦(這裡指的Mac) 怎麼打包並上傳 問題一:手機控制Mac電腦 AppleScript 有好多辦法是可以控制電腦執行一定的操作,這裡

Pycharm技巧加引號,快速加引號,批量加引號

Pycharm 一鍵加引號,快速加引號,批量加引號,自定義加引號 最近因為工作需要寫了點指令碼,有時候在爬取的時候需要將瀏覽器中的Hearders 複製到Pycharm中使用, 但是複製過來的格式不是需要的鍵值格式,挨個手動敲鍵盤太累,畢竟咱們寫指令碼就是為了解放雙手(手動滑稽): 解決方式

iOS app打包並上傳伺服器

打包指令碼使用方法 1.開啟終端 2.在終端中直接拉兩個檔案路徑 到這裡就完成了一鍵打包的工作。 注: 1.中間如果出現提示下面這個錯誤: xcrun: error: unable to find utility “Pac

java 自己實現專案碼 解決檔案亂碼問題

經常在使用外部匯入的專案,開啟之後想學習一番,結果發現所有註釋都亂碼,看起來很頭疼,這個問題困擾我很久,相信大家在學習過程中也會遇到。所以昨晚寫了一個小程式,只要輸入專案檔案的根目錄,可以實現專案內所有java檔案自動轉碼的功能。預設是從GBK轉碼為UTF-8。 首先聊聊正