Mantle 2.0 не может проанализировать JSON для записи в массиве
Следующие разборы кода JSON больше не работают для меня после того, как я обновил Mantle до 2.0. Они могут нормально работать на более старой версии Mantle (я не помню правильный номер версии. Что я знаю, так это то, что я скачал его в ноябре 2013 года.)
Вот содержимое JSON:
{
date = "2015-05-21";
error = 0;
results = (
{
currentCity = "beijing";
index = (
{
des = "desc1";
tipt = "tipt1";
title = "title1";
zs = "zs1";
},
{
des = "desc2";
tipt = "tipt2";
title = "title2";
zs = "zs2";
},
{
des = "desc3";
tipt = "tipt3";
title = "title3";
zs = "zs3";
}
);
}
);
status = success;
}
Модель, которую я определил:
// .h
#import "MTLModel.h"
#import "Mantle.h"
@interface BaiduWeatherResults : MTLModel<MTLJSONSerializing>
@property (nonatomic, strong) NSNumber *error;
@property (nonatomic, strong) NSString *status;
@property (nonatomic, strong) NSString *date;
@property (nonatomic, strong) NSString *currentCity;
@end
// .m
#import "BaiduWeatherResults.h"
@implementation BaiduWeatherResults
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
@"error" : @"error",
@"status" : @"status",
@"date" : @"date",
@"currentCity" : @"results.currentCity",
};
}
+ (NSValueTransformer *) currentCityJSONTransformer
{
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSArray *values) {
return [values firstObject];
} reverseBlock:^(NSString *str) {
return @[str];
}];
}
Разбор JSON для моделирования
id results =[MTLJSONAdapter modelOfClass:[BaiduWeatherResults class]
fromJSONDictionary:responseObject
error:nil];
NSLog(@"results:%@", results);
Мой вопрос:
Коды могут работать на старых мантии. В Mantle 2.0 анализ не удался, когда я добавил @"currentCity": @"results.currentCity" в словарь, возвращаемый JSONKeyPathsByPropertyKey . Кто-нибудь знает, что я пропустил для разбора?
Кстати, currentCityJSONTransformer действительно позвонил, когда начался анализ. Но преобразователь никогда не используется, потому что строка "return [values firstObject];" никогда не выполняется.
Заранее спасибо.
1 ответ
Попробуй это -
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
@"error" : @"error",
@"status" : @"status",
@"date" : @"date",
@"currentCity" : @"results",
};
}
+ (NSValueTransformer *) currentCityJSONTransformer
{
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSArray *values) {
NSDictionary *cityInfo = [values firstObject];
return cityInfo[@"currentCity"];
} reverseBlock:^(NSString *str) {
return @[@{@"currentCity" : str}];
}];
}
Так как результаты представляют собой массив словарей, вы не можете получить доступ к currentCity
через точечный синтаксис в JSONKeyPathsByPropertyKey
, Вместо currentCityJSONTransformer
находит первый словарь в массиве результатов и возвращает его значение для currentCity
, Вы можете добавить проверку типов и определить @"currentCity"
ключ в одном месте.