定义
JSONModel 是一个能够快速巧妙的创建数据模型的库
一个接口用一个Model即可,但是要记得在.m中实现创建的多个model
记得导入第三方库 JSONModel
使用
一个例子说明:
要解析的大概是这样
{
date: "20140523",
stories: [
{
title: "中国古代家具发展到今天有两个高峰,一个两宋一个明末(多图)",
ga_prefix: "052321",
images: [
"http://p1.zhimg.com/45/b9/45b9f057fc1957ed2c946814342c0f02.jpg"
],
type: 0,
id: 3930445
},
...
],
top_stories: [
{
title: "商场和很多人家里,竹制家具越来越多(多图)",
image: "http://p2.zhimg.com/9a/15/9a1570bb9e5fa53ae9fb9269a56ee019.jpg",
ga_prefix: "052315",
type: 0,
id: 3930883
},
...
]
}
下面为解析代码
首先创建一个Model类
Model.h
#import "JSONModel.h"
@interface StoriesModel: JSONModel
@property (nonatomic, copy)NSString *title;
@property (nonatomic, copy)NSString *ga_prefix;
@property (nonatomic, copy)NSArray *images;
@property (nonatomic, copy)NSString *multipic;
@property (nonatomic, copy)NSString *id;
@end
@interface TopStoriesModel: JSONModel
@property (nonatomic, copy)NSString *image;
@property (nonatomic, copy)NSString *type;
@property (nonatomic, copy)NSString *id;
@property (nonatomic, copy)NSString *ga_prefix;
@property (nonatomic, copy)NSString *title;
@end
@interface Model : JSONModel
@property (nonatomic, copy)NSString *date;
@property (nonatomic, copy)NSArray<StoriesModel*> *stories;
@property (nonatomic, copy)NSArray<TopStoriesModel*> *top_stories;
@end
Model.m
#import "Model.h"
@implementation Model
+ (BOOL)propertyIsOptional:(NSString *)propertyName
{
return YES;
}
@end
@implementation StoriesModel
+ (BOOL)propertyIsOptional:(NSString *)propertyName
{
return YES;
}
@end
@implementation TopStoriesModel
然后在要使用的地方(比如:ViewController)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//确定请求路径
NSString *urlString = @"https://news-at.zhihu.com/api/4/news/latest";
//在使用url的时候,如果字符串中有中文,那么要对中文进行转码操作
urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString:urlString];
//创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//创建会话对象
NSURLSession *sharedSession = [NSURLSession sharedSession];
//根据会话对象来创建请求task任务
NSURLSessionDataTask *dataTask = [sharedSession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if(data && (error == nil)){
//网络访问成功,解析数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
self->_titleMutableArray = [NSMutableArray array];
self->_imagesMutableArray = [NSMutableArray array];
self->_hourlyModel = [[Model alloc]initWithDictionary:dict error:nil];
for(int i = 0;i < self->_hourlyModel.stories.count;i++){
StoriesModel *storiesModel = [[StoriesModel alloc]initWithDictionary:dict[@"stories"][i] error:nil];
NSLog(@"%@", storiesModel.title);
[self.titleMutableArray addObject:storiesModel.title];
//这里将数据放进数组以便后续使用 [self.imagesMutableArray addObject:storiesModel.images[0]];
}
NSLog(@"1---%@---", self.titleMutableArray);
for(int i = 0;i < self->_hourlyModel. top_stories.count;i++){
TopStoriesModel *topStoriesModel = [[TopStoriesModel alloc]initWithDictionary:dict[@"top_stories"][i] error:nil];
NSLog(@"%@", topStoriesModel);
}
}
else{
//网络访问失败
NSLog(@"error = %@", error);
}
} ];
//执行发送请求任务
[dataTask resume];
}