JSONModel 是一个库,他能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它.
JSONModel使用方法
1*创建一个你自己的类,并继承至 JSONModel
2.在你的头文件里面进行声明你所需要的 JSON key值
3* .m文件中你不需要做其他的事情了.
接下来简单介绍一下 JSONModel的一些常规使用法则
1. JSONModel自带有 有效性检查,如果指定的服务器返回的某个字段没有返回值,而且该又是必须的, 像下面这样写,则会抛出异常
@property (nonatomic, strong) NSString *Nothing;
一般情况下,我们不想因为服务器的某个值没有返回就使程序崩溃, 我们会加关键字Optional.
@property (nonatomic, strong) NSString <Optional>*Nothing;
2.如果传过来的 JSON 合法,你所定义的所有的属性都会与该 JSON 值相匹配,并且 JSONModel 也会尝试尽可能的转换成你所想要的数据:
// 本来是NSInteger类型直接给转换为 NSString
@property (nonatomic, strong) NSString *city_id;
3自动把下划线方式的命名转为驼峰命名属性。还有类似的,如大写转为小写的方法
@property (nonatomic, strong) NSString *city_name;
// 在.m文件中写上这个方法
+(JSONKeyMapper*)keyMapper {
return [JSONKeyMapper mapperFromUnderscoreCaseToCamelCase];
}
@property (nonatomic, strong) NSString *cityName;
JSONModel处理数据问题
请求网址: http://api.lanrenzhoumo.com/district/list/allcity?session_id=00004016b3e14bbea40c1aa1a14c2273a35352
请求数据类型
// 方式一
创建一个model 继承JSONModel 声明自己想要的key 在解析数据时我们可以直接使用下面的方法 根据字典创建mode
AmbitusCityTypeModel *model = [[AmbitusCityTypeModel alloc] initWithDictionary:dic error:nil];
// initWithDictionary方法
相当于正常解析时 创建model kvc赋值
//方式二
//根据字典的数组创建model的数组 得到的数组里面都是model类型的数据
self.dataArray = [LoanModel arrayOfModelsFromDictionaries:tempArr];
JSONModel的处理复杂嵌套的问题 还是以上面的数据和接口举例
声明两个model 这个嵌套数据都是这种模型的
#import "JSONModel.h"
@protocol AmbitusCityModel
@end
@interface AmbitusCityModel : JSONModel
@property (nonatomic, assign) NSInteger city_id;
@property (nonatomic, strong) NSString *city_name;
@end
#import "AmbitusCityModel.h"
@implementation AmbitusCityModel
@end
// 第二个model
#import "JSONModel.h"
#import "AmbitusCityModel.h"
@interface AmbitusCityTypeModel : JSONModel
@property (nonatomic, strong) NSString *begin_key;
@property (nonatomic, strong) NSMutableArray<AmbitusCityModel> *city_list;
@end
#import "AmbitusCityTypeModel.h"
@implementation AmbitusCityTypeModel
@end
// 解析过程如下
- (void)setUpData {
NSString *urlString = [NSString stringWithFormat:@"%@",@"http://api.lanrenzhoumo.com/district/list/allcity?session_id=00004016b3e14bbea40c1aa1a14c2273a35352"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString] cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30.0];
[request setHTTPMethod:@"GET"];
self.dataArray = [NSMutableArray array];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
self.dataArray = [NSMutableArray array];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"Httperror: %@%ld", error.localizedDescription, error.code);
} else {
if (data) {
NSDictionary *tempDict = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
self.dataArray = [TypeTwoModel arrayOfModelsFromDictionaries:[tempDict valueForKey:@"result"]];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}
}
}];
[dataTask resume];
}