2014-06-17 81 views
1

我試圖從Sickbeard API映射到我的對象與地幔,但我無法弄清楚如何,因爲響應是基於鍵值使用TVDB ID作爲關鍵,就像這樣的:使用與Sickbeard API地幔

"data": { 
    "71663": { 
     "air_by_date": 0, 
     "cache": { 
      "banner": 1, 
      "poster": 1 
     }, 
     "language": "en", 
     "network": "FOX", 
     "next_ep_airdate": "2014-09-28", 
     "paused": 0, 
     "quality": "Any", 
     "show_name": "The Simpsons", 
     "status": "Continuing", 
     "tvdbid": 71663, 
     "tvrage_id": 6190, 
     "tvrage_name": "The Simpsons" 
    }, 
    "72227": { 
     "air_by_date": 0, 
     "cache": { 
      "banner": 1, 
      "poster": 1 
     }, 
     "language": "en", 
     "network": "CBS", 
     "next_ep_airdate": "", 
     "paused": 0, 
     "quality": "Any", 
     "show_name": "Two and a Half Men", 
     "status": "Continuing", 
     "tvdbid": 72227, 
     "tvrage_id": 6454, 
     "tvrage_name": "Two and a Half Men" 
    } 
} 

由於data對象不只是包含這樣[{"key": value},{"key": value}]對象的數組,而是通過對象一些獨特的ID鍵,我不知道我應該如何映射到我的SBShow類,等被定義:

#import <Foundation/Foundation.h> 
#import <Mantle.h> 

@interface SBShow : MTLModel <MTLJSONSerializing> 

@property (nonatomic, strong) NSNumber *tvdbid; 
@property (nonatomic, strong) NSString *showName; 
@property (nonatomic, strong) NSString *network; 
@property (nonatomic, strong) NSString *status; 

@end 

@implementation SBShow 

+ (NSDictionary *)JSONKeyPathsByPropertyKey { 
    return @{@"showName": @"show_name"}; 
} 

+ (NSValueTransformer *)dateJSONTransformer { 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 

    return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *str) { 
     return [formatter dateFromString:str]; 
    } reverseBlock:^(NSDate *date) { 
     return [formatter stringFromDate:date]; 
    }]; 
} 

@end 

任何幫助將不勝感激。

回答

1

你能做到這樣,通過將關鍵「JSON字典」的其餘部分:

NSMutableArray *shows = [NSMutableArray array]; 
// data is an NSDictionary, representing the 'data' key in the JSON 
[data enumerateKeysAndObjectsUsingBlock:^(NSString *tvdbID, NSDictionary *showData, BOOL *stop) { 
    NSMutableDictionary *modelDictionary = [showData mutableCopy]; 
    modelDictionary[@"tvdbid"] = tvdbID; 
    NSError *error = nil; 
    SBShow *show = [MTLJSONAdapter modelOfClass:SBShow.class 
          fromJSONDictionary:modelDictionary 
              error:&error]; 
    [shows addObject:show]; 
}]; 

NSLog(@"Show models are %@", shows); 

您可以編寫自己的變壓器封裝這個邏輯,並將其應用到數據的關鍵,如果適當。