Swift 嘗試寫一個庫Json轉model--ZZJModel

庫是為了把一些繁瑣的操作變的更簡單,說白了就是封裝邑蒋。

Json轉Model 也有一些庫了,我寫這個簡單的庫就練練手按厘,其他庫我也沒用過医吊,(項目中還是半自動,手寫轉的)逮京。

簡單介紹下ZZJModel卿堂,就是將Json類型的數據一行代碼轉成對象。對json不了解的 自行google懒棉。

這里有一組json

{
    "code": 0,
    "msg": "",
    "result": {
        "room": {
            "id": "5",
            "uid": "78",
            "house": 0,
            "start_time": "2015-11-28",
            "city": "上海",
            "region": "長寧",
            "address": "仁達商務樓",
            "summary": "祖安求輔助",
            "pricemin": 3000,
            "moneymin": 2000,
            "longitude": "121.43660700",
            "latitude": "31.21492900",
            "comment_count": 19,
            "photo_count": 7,
            "subway_station": "交通大學",
            "subway_line": "11號線",
            "status": 0,
            "format_time": "11-27",
            "create_time": "04-13",
            "last_modify_time": "2015-11-27 18:33:51",
            "dateDetail": "11月28日入住",
            "pricesection": "預算 2000",
            "cost1": 2000,
            "cost2": null,
            "localization": "長寧 11號線 交通大學",
            "content": "祖安求輔助"
        },
        "content": {
            "id": "5",
            "content": "祖安求輔助",
            "show_content": true
        },
        "show_content": 1233
    }
    ,
    "station": [
                "富錦路",
                "友誼西路",
                "寶安公路",
                "共富新村",
                "呼蘭路",
                "通河新村",
                "共康路",
                "彭浦新村",
                "汶水路",
                "上海馬戲城",
                "延長路",
                "中山北路",
                "上翰菝瑁火車站",
                "漢中路",
                "新閘路",
                "人民廣場",
                "黃陂南路",
                "陜西南路",
                "常熟路",
                "上海圖書館",
                "衡山路",
                "徐家匯",
                "上海體育館",
                "漕寶路",
                "上海南站",
                "錦江樂園",
                "蓮花路",
                "外環(huán)路",
                "莘莊"
                ]
    ,"items":[
             {
             "id": "5",
             "content": "測試1",
             "show_content": true
             },
             {
             "id": "6",
             "content": "測試2",
             "show_content": true
             },
             {
             "id": "7",
             "content": "測試3",
             "show_content": false
             }
    ]
}

這是一段比較復雜的json,這組json看來 整體是一個對象 中間還有一個room對象和content對象。 還有一個數組 一個對象數組 , 手動轉肯定要寫很多for循環(huán)策严。那么 我這個庫呢穗慕?

首先 讀取JSON,我這些字串放在.json文件中妻导,用SwiftyJSON讀取逛绵, 后面我有可能會直接考慮加上data轉model 現(xiàn)在不會加

 if let path = NSBundle.mainBundle().pathForResource("test", ofType: "json"){
            let data:NSData?
            do {
                data = try NSData(contentsOfFile: path, options: NSDataReadingOptions())
                let json = JSON(data:data!)
                //任意對象的模型轉json  必須是dic
                let all = ZZAll.zz_objToModel(json.object) as ZZAll  //這里需要轉一下
                print(all.result?.room?.address)    
                
                if let dic = json.dictionaryObject{
                    
                    let all1 = ZZAll.zz_dicToModel(dic) as ZZAll  //這里需要轉一下
                    print(all1.result?.content?.id)

                }
                
            }catch let err {
                debugPrint(err)
            }
        }

除了獲取json數據的方法 字典轉模型 就一句話
let all = ZZAll.zz_objToModel(json.object) as? ZZAll

或者

let all1 = ZZAll.zz_dicToModel(dic) as? ZZAll

這樣就可以打印對象中的信息 包括對象中的對象的屬性
print(all?.result?.room?.address)

有兩種調用方式 一種是傳入AnyObject 一種是傳入[String:AnyObject]

git上大多數庫的model都是要繼承第三方JSON轉Model的庫的 怀各,我們這里 不用

model

/// 所有信息
class ZZAll: NSObject{
    
    //MARK: - 屬性定義
    var code:NSNumber?
    var msg:String?
    var result:ZZResult?
    var station:[String]?
    var items:[ZZContent]?
    
    /**
     根據Key獲取實體相關信息
     
     - returns: 字典
     */
    override func zz_modelPropertyClass()->[String:AnyClass]?{
        return ["result":ZZResult.self,"items":ZZContent.self]  //傳入對應類型
    }
    
}

如果有對象屬性 需要重寫zz_modelPropertyClass方法 返回key,value

就這樣把所有model 寫出來就行了。

/// 結果信息
class ZZResult: NSObject{
    
    //MARK: - 屬性定義
    var show_content:NSNumber?
    var content:ZZContent?
    var room:ZZRoom?
    

    override func zz_modelPropertyClass()->[String:NSObject]?{
        return ["room":ZZRoom.self,
                "content":ZZContent.self]
    }
}

/// 內容信息
class ZZContent: NSObject{
    
    //MARK: - 屬性定義
    var id:NSNumber?
    var content:String?
    var show_content:Bool?    
}

Room 比較雷同 屬性較多久不貼了

目前庫還有點問題 术浪,沒辦法處理Bool類型瓢对,setValue不能給他賦值,objc_setAssociatedObject也沒用 添吗。Bool對應的對象類型是NSNumber 這塊還在考慮怎么處理 沥曹。如果誰有好的idea,點一下 碟联,不勝感激妓美!

那么怎么實現(xiàn)的呢,也很簡單就一個文件

貼圖

總共就200多行代碼 鲤孵,感興趣的同學可以看看壶栋。

git地址:https://github.com/smalldu/ZZJModel

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市普监,隨后出現(xiàn)的幾起案子贵试,更是在濱河造成了極大的恐慌,老刑警劉巖凯正,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毙玻,死亡現(xiàn)場離奇詭異,居然都是意外死亡廊散,警方通過查閱死者的電腦和手機桑滩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來允睹,“玉大人运准,你說我怎么就攤上這事$允埽” “怎么了胁澳?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長米者。 經常有香客問我韭畸,道長,這世上最難降的妖魔是什么蔓搞? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任陆盘,我火速辦了婚禮,結果婚禮上败明,老公的妹妹穿的比我還像新娘隘马。我一直安慰自己,他們只是感情好妻顶,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布酸员。 她就那樣靜靜地躺著蜒车,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幔嗦。 梳的紋絲不亂的頭發(fā)上酿愧,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音邀泉,去河邊找鬼嬉挡。 笑死,一個胖子當著我的面吹牛汇恤,可吹牛的內容都是我干的庞钢。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼因谎,長吁一口氣:“原來是場噩夢啊……” “哼基括!你這毒婦竟也來了?” 一聲冷哼從身側響起财岔,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤风皿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匠璧,有當地人在樹林里發(fā)現(xiàn)了一具尸體桐款,經...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年夷恍,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲁僚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡裁厅,死狀恐怖,靈堂內的尸體忽然破棺而出侨艾,到底是詐尸還是另有隱情执虹,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布唠梨,位于F島的核電站袋励,受9級特大地震影響,放射性物質發(fā)生泄漏当叭。R本人自食惡果不足惜茬故,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚁鳖。 院中可真熱鬧磺芭,春花似錦、人聲如沸醉箕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至放棒,卻和暖如春姻报,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背间螟。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工吴旋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厢破。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓荣瑟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溉奕。 傳聞我的和親對象是個殘疾皇子褂傀,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容