在iOS開發中,資料解析轉化方面有許多比較好用的框架,如MjExtension,自己以前寫過一個資料解析框架,今天就簡單的總結一下。
資料解析,無非就是資料的轉化,我這個框架主要用處就是將從網路請求來的資料轉化為模型類的物件格式,還是就是將程式碼中的模型物件轉化為json資料,這個常用於傳送post請求。
專案的程式碼將會託管到github上,需要的可以去下載。也可以留言提意見。
下載完專案後,開啟,框架就在JsonAgent
資料夾,主要分為兩個大類SYYJSonToObjectBuilder
和SYYJSonPersistBuilder
,對應的用途如名字。
一.json資料解析為物件
框架實現的原理就是kvo轉化。實現步驟如下
-
CREATE_JSON_TO_OBJECT_BUILDER(builder)
建立構造器 -
SET_BUILDER_CONTAINER(builder, className)
為構造器設定鍵值 -
SET_BUILDER_RESOURCE(builder, resource)
為構造器設定資源 -
ADD_BUILDER_RESOURCE_PROCESSOR(builder, class, key)
填寫對應鍵值在資源中的key
-
GET_RESULT(builder)
輸出物件
容器類遵循SYYJSonAbstractBuilderInterface.h
協議,協議裡有增加,刪除屬性的方法,可以對類屬性做處理,demo裡並沒有做類似的封裝,感興趣的同學可以自己實現。為構造器設定鍵值,就是針對資料的最外層鍵值進行指定,然後對構造器指定資源,資源一般的字典資料型別,然後指定資源中鍵值,如測試資料中的programmers
,authors
,musicians
,最後是就是解析,解析過程就是通過一層層進行遍歷,通過kvo賦值,如果是陣列型別或者字典型別,會進一步做遍歷,直至遍歷到我們指定類,即我們要最終轉化的型別,從而得到最終的模型物件。
如下圖所示:是解析出的結果,可以看到,傳入的json資料已經轉化為我們demo裡定義的型別
二. 類物件轉化為json資料
步驟如下:先建立解析器, SYYJSonAbstractBuilder
是遵循SYYJSonAbstractBuilderInterface
協議的,宣告資源型別,將物件傳入宣告資源中,將資源放入轉化器中,最後進行轉化。步驟很簡單,就不多解釋了。
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];
複製程式碼
最終效果如下所示: