? ? ? ?在iOS開發(fā)中吃媒,數(shù)據(jù)解析轉(zhuǎn)化方面有許多比較好用的框架候醒,如MjExtension,自己以前寫過一個數(shù)據(jù)解析框架风秤,今天就簡單的總結(jié)一下骨稿。
? ? ? ? 數(shù)據(jù)解析笨鸡,無非就是數(shù)據(jù)的轉(zhuǎn)化,我這個框架主要用處就是將從網(wǎng)絡請求來的數(shù)據(jù)轉(zhuǎn)化為模型類的對象格式坦冠,還是就是將代碼中的模型對象轉(zhuǎn)化為json數(shù)據(jù)形耗,這個常用于發(fā)送post請求。
? ?項目的代碼將會托管到github上辙浑,需要的可以去下載激涤。也可以留言提意見。
下載完項目后判呕,打開倦踢,框架就在JsonAgent文件夾,主要分為兩個大類SYYJSonToObjectBuilder和SYYJSonPersistBuilder佛玄,對應的用途如名字硼一。
一.json數(shù)據(jù)解析為對象
框架實現(xiàn)的原理就是kvo轉(zhuǎn)化累澡。實現(xiàn)步驟如下
1. ?CREATE_JSON_TO_OBJECT_BUILDER(builder) ? 創(chuàng)建構(gòu)造器
2. ?SET_BUILDER_CONTAINER(builder, className) ? 為構(gòu)造器設置鍵值
3. ?SET_BUILDER_RESOURCE(builder, resource) ? ?為構(gòu)造器設置資源
4. ?ADD_BUILDER_RESOURCE_PROCESSOR(builder, class, key)? ? 填寫對應鍵值在資源中的key
5. ? GET_RESULT(builder)? 輸出對象
容器類遵循SYYJSonAbstractBuilderInterface.h協(xié)議梦抢,協(xié)議里有增加,刪除屬性的方法愧哟,可以對類屬性做處理奥吩,demo里并沒有做類似的封裝哼蛆,感興趣的同學可以自己實現(xiàn)。為構(gòu)造器設置鍵值霞赫,就是針對數(shù)據(jù)的最外層鍵值進行指定腮介,然后對構(gòu)造器指定資源,資源一般的字典數(shù)據(jù)類型端衰,然后指定資源中鍵值叠洗,如測試數(shù)據(jù)中的paogrammers,authors旅东,musicians灭抑,最后是就是解析,解析過程就是通過一層層進行遍歷抵代,通過kvo賦值腾节,如果是數(shù)組類型或者字典類型,會進一步做遍歷荤牍,直至遍歷到我們指定類案腺,即我們要最終轉(zhuǎn)化的類型,從而得到最終的模型對象康吵。
如下圖所示:是解析出的結(jié)果劈榨,可以看到晦嵌,傳入的json數(shù)據(jù)已經(jīng)轉(zhuǎn)化為我們demo里定義的類型
二. 類對象轉(zhuǎn)化為json數(shù)據(jù)
步驟如下:先創(chuàng)建解析器鞋既, SYYJSonAbstractBuilder? 是遵循SYYJSonAbstractBuilderInterface協(xié)議的,聲明資源類型耍铜,將對象傳入聲明資源中邑闺,將資源放入轉(zhuǎn)化器中,最后進行轉(zhuǎn)化棕兼。步驟很簡單陡舅,就不多解釋了。
SYYJSonAbstractBuilder* decode_builder = [[SYYJSonPersistBuilder alloc]init];
SYYJSONBUILDER_VAR_TYPE decode_resource;
decode_resource.instance_ = self.object;
[decode_builder setBuilderResource:decode_resource];
NSString* jsonString = [decode_builder getResult];
最終效果如下所示: