Мантия: игнорировать ключи во вложенных словарях внутри массива
Я использую инфраструктуру Mantle в iOS для простой структуры JSON, которая выглядит следующим образом:
{
"posts":
[
{
"postId": "123",
"title": "Travel plans",
"location": "Europe"
},
{
"postId": "456",
"title": "Vacation Photos",
"location": "Asia"
}
],
"updates": [
{
"friendId": "ABC123"
}
]
}
По сути, меня интересует только "posts"
ключ и желание полностью игнорировать "updates"
ключ. Дополнительно в пределах "posts"
массив я хочу полностью игнорировать "location"
ключ. Вот как я настроил свои модели мантии:
@interface MantlePost: MTLModel <MTLJSONSerializing>
@property (nonatomic, strong) NSString *postId;
@property (nonatomic, strong) NSString *title;
@end
@implementation MantlePost
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
@"postId": @"postId",
@"title": @"title",
};
}
@end
А вот мой MantlePosts
модель:
@interface MantlePosts: MTLModel<MTLJSONSerializing>
@property (nonatomic, strong) NSArray<MantlePost *> *posts;
@end
@implementation MantlePosts
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
@"posts": @"posts"
};
}
+ (NSValueTransformer *)listOfPosts {
return [MTLJSONAdapter arrayTransformerWithModelClass:MantlePost.class];
}
@end
Наконец, вот как я загружаю свой JSON для преобразования:
- (NSDictionary *)loadJSONFromFile {
NSString *jsonPath = [[NSBundle mainBundle] pathForResource:@"parse-response" ofType:@"json"];
NSError *error = nil;
NSData *jsonData = [[NSString stringWithContentsOfFile:jsonPath usedEncoding:nil error:&error] dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:&error];
return jsonDict;
}
NSError = nil;
NSDictionary *jsonData = [self loadJSONFromFile];
MantlePosts *posts = (MantlePosts *)[MTLJSONAdapter modelOfClass:MantlePosts.class fromJSONDictionary:jsonData error:&error];
Проблема в том, что мой массив потомков MantlePosts
содержит все 3 свойства postId
, title
, а также location
, когда я явно сопоставил только postId
а также title
, "updates"
массив игнорируется, что я и хотел, но я застрял в возможности игнорировать определенные ключи в дочерних массивах. Любая помощь в этом будет оценена.
Вот пример того, что я получаю, когда я po
ответ в консоли.
(lldb) po posts
<MantlePosts: 0x6000000153c0> {
posts = (
{
location = Europe;
postId = 123;
title = "Travel plans";
},
{
location = Asia;
postId = 456;
title = "Vacation Photos";
}
);
}
(lldb)