標籤:
具體的使用方法,請見下面說明,或者見工程裡的單元測試代碼。或者,參考原始文檔:
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上的對象映射公用方法-備