關於iOS上的對象映射公用方法-備

來源:互聯網
上載者:User

標籤:

具體的使用方法,請見下面說明,或者見工程裡的單元測試代碼。或者,參考原始文檔:

https://github.com/mystcolor/JTObjectMapping

 

 

使用方法

========

 

絕大多數情況下,需要用到的就是一個方法:

[NSObject objectFromJSONObject:stateObject mapping:nil];

其中,把NSObject換成我們想映射成的類的名字。

 

稍微複雜一點,假設類的屬性和JSON裡的key名字不是一一對應的,那麼就要寫一個映射關係表作為mapping參數:

    NSDictionary *mapping = [NSDictionary dictionaryWithObjectsAndKeys:

                             @"myState", @"state",

                             @"movieList", @"movie",

                             nil];

    [NSObject objectFromJSONObject:stateObject mapping:mapping];

 

如果再複雜一點,我們需要映射一個數組,數組的每個元素映射到一個對象,那麼就用到第2個方法:

[NSObject mappingWithKey:@"responseState" mapping:nil]

同樣,把NSObject換成數組元素對應的類,key是用來存放整個數組的那個屬性。

 

 

注意

====

JSON裡的字串,是能自動對應成NSNumber或者int型的,不需要特別寫代碼。如果想把一個字串日期,映射成NSDate型,請參考原始文檔。

 

 

具體舉個例子

===========

 

假設我們有這樣一段JSON:

 

 {

 "state":[

 {

 "respCode":"0000",

 "respMsg":"1"

 }

 ],

 "movie":[

 {

 "body":"    一開始,這隻是葉問的故事他生於佛山",

 "pics":"/images/jz/4779-1-20121225133147.jpg,/images/jz/4779-2-20121225133147.jpg",

 "name":"一代宗師",

 "movid":"4779",

 "length":"120",

 "hasplan":"1",

 "trailor":"/4779.m4v",

 "director":"梁朝偉 章子怡 張震 ",

 "type":"動作/傳記/劇情/IMAX",

 "url":"http://img.fun-guide.mobi/show?src=http://zhaohang.fun-guide.mobi:8080/tm/images/hb/4779-20121225133147.jpg&w=140",

 "popularity":"6"

 },

 {

 ...

 }

 ]

 }

 

現在,想把它映射到自訂的對象中去。有幾種情況:

 

第一種情況,簡單地把state數組裡面的第一個元素映射成一個FGStateModel類

那麼就是,取出這個節點:

    NSDictionary *stateObject = [[self.json objectForKey:@"state"] objectAtIndex:0];

然後,執行映射:

    self.state = [FGStateModel objectFromJSONObject:stateObject mapping:nil];

 

第二種情況,把movie這個字典數組映射成一個數組,數組的每個元素是FGMovieModel

    NSArray *movieObject = [self.json objectForKey:@"movie"];

    self.movieList = [FGMovieModel objectFromJSONObject:movieObject mapping:nil];

 

第三種情況,如果對象的屬性和JSON名字不一樣,可以使用映射表,例如我們想把上面整個json對象映射成一個 FGResponseModel 對象,其中,state數組映射成 responseState 屬性,movie 數組映射成 movieList 屬性。那麼,我們需要告訴映射器這個數組裡的元素要映射成什麼對象。

 

所以,通過 mapping 這個參數告訴它:“請把 JSON 裡的 state 數組裡的每個元素映射成一個 FGStateModel 對象,並且把最終的數組放到responseState這個屬性裡。另外,把 movie 這個數組映射成一個 FGMovieModel 數組,並且儲存到 movieList 這個屬性中。“

 

    NSDictionary *mapping = [NSDictionary dictionaryWithObjectsAndKeys:

                             [FGStateModel mappingWithKey:@"responseState" mapping:nil], @"state",

                             [FGMovieModel mappingWithKey:@"movieList" mapping:nil], @"movie",

                             nil];

    self.response = [FGResponseModel objectFromJSONObject:self.json mapping:mapping];

關於iOS上的對象映射公用方法-備

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.