JSON格式化在线查看工具:http://tool.oschina.net/codeformat/json
JSON-->OC object :
NSString *json = @"{\"name\" : \"solozyx\"}";
NSObject *jsonObj = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding]
options:NSJSONReadingAllowFragments
error:nil];
NSLog(@"%@",jsonObj);
NSLog(@"%@",[jsonObj valueForKey:@"name"]);
//2016-08-06 19:13:57.838 JSON解析[37298:544290] {
// name = solozyx;
//}
//2016-08-06 19:13:57.839 JSON解析[37298:544290] solozyx
NSJSONReadingMutableContainers
NSJSONReadingMutableLeaves
NSJSONReadingAllowFragments
请求接口:
http://www.example.com:8080/videos
假如服务器返回如下json格式:
{"videos":[{"id":1,"image":"resources/images/minion_01.png","length":10,"name":"小黄人 第01部","url":"resources/videos/minion_01.mp4"},{"id":2,"image":"resources/images/minion_02.png","length":12,"name":"小黄人 第02部","url":"resources/videos/minion_02.mp4"},{"id":3,"image":"resources/images/minion_03.png","length":14,"name":"小黄人 第03部","url":"resources/videos/minion_03.mp4"},{"id":4,"image":"resources/images/minion_04.png","length":16,"name":"小黄人 第04部","url":"resources/videos/minion_04.mp4"},{"id":5,"image":"resources/images/minion_05.png","length":18,"name":"小黄人 第05部","url":"resources/videos/minion_05.mp4"},{"id":6,"image":"resources/images/minion_06.png","length":20,"name":"小黄人 第06部","url":"resources/videos/minion_06.mp4"},{"id":7,"image":"resources/images/minion_07.png","length":22,"name":"小黄人 第07部","url":"resources/videos/minion_07.mp4"},{"id":8,"image":"resources/images/minion_08.png","length":24,"name":"小黄人 第08部","url":"resources/videos/minion_08.mp4"},{"id":9,"image":"resources/images/minion_09.png","length":26,"name":"小黄人 第09部","url":"resources/videos/minion_09.mp4"},{"id":10,"image":"resources/images/minion_10.png","length":28,"name":"小黄人 第10部","url":"resources/videos/minion_10.mp4"},{"id":11,"image":"resources/images/minion_11.png","length":30,"name":"小黄人 第11部","url":"resources/videos/minion_11.mp4"},{"id":12,"image":"resources/images/minion_12.png","length":32,"name":"小黄人 第12部","url":"resources/videos/minion_12.mp4"},{"id":13,"image":"resources/images/minion_13.png","length":34,"name":"小黄人 第13部","url":"resources/videos/minion_13.mp4"},{"id":14,"image":"resources/images/minion_14.png","length":36,"name":"小黄人 第14部","url":"resources/videos/minion_14.mp4"},{"id":15,"image":"resources/images/minion_15.png","length":38,"name":"小黄人 第15部","url":"resources/videos/minion_15.mp4"},{"id":16,"image":"resources/images/minion_16.png","length":40,"name":"小黄人 第16部","url":"resources/videos/minion_16.mp4"}]}
为方便查看,手动格式化如下:
{
"videos":
[
{"id":1,"image":"resources/images/minion_01.png","length":10,"name":"小黄人 第01部","url":"resources/videos/minion_01.mp4"},
{"id":2,"image":"resources/images/minion_02.png","length":12,"name":"小黄人 第02部","url":"resources/videos/minion_02.mp4"},
{"id":3,"image":"resources/images/minion_03.png","length":14,"name":"小黄人 第03部","url":"resources/videos/minion_03.mp4"},
{"id":4,"image":"resources/images/minion_04.png","length":16,"name":"小黄人 第04部","url":"resources/videos/minion_04.mp4"},
{"id":5,"image":"resources/images/minion_05.png","length":18,"name":"小黄人 第05部","url":"resources/videos/minion_05.mp4"},
{"id":6,"image":"resources/images/minion_06.png","length":20,"name":"小黄人 第06部","url":"resources/videos/minion_06.mp4"},
{"id":7,"image":"resources/images/minion_07.png","length":22,"name":"小黄人 第07部","url":"resources/videos/minion_07.mp4"},
{"id":8,"image":"resources/images/minion_08.png","length":24,"name":"小黄人 第08部","url":"resources/videos/minion_08.mp4"},
{"id":9,"image":"resources/images/minion_09.png","length":26,"name":"小黄人 第09部","url":"resources/videos/minion_09.mp4"},
{"id":10,"image":"resources/images/minion_10.png","length":28,"name":"小黄人 第10部","url":"resources/videos/minion_10.mp4"},
{"id":11,"image":"resources/images/minion_11.png","length":30,"name":"小黄人 第11部","url":"resources/videos/minion_11.mp4"},
{"id":12,"image":"resources/images/minion_12.png","length":32,"name":"小黄人 第12部","url":"resources/videos/minion_12.mp4"},
{"id":13,"image":"resources/images/minion_13.png","length":34,"name":"小黄人 第13部","url":"resources/videos/minion_13.mp4"},
{"id":14,"image":"resources/images/minion_14.png","length":36,"name":"小黄人 第14部","url":"resources/videos/minion_14.mp4"},
{"id":15,"image":"resources/images/minion_15.png","length":38,"name":"小黄人 第15部","url":"resources/videos/minion_15.mp4"},
{"id":16,"image":"resources/images/minion_16.png","length":40,"name":"小黄人 第16部","url":"resources/videos/minion_16.mp4"}
]
}
模仿请求该接口 获取json字典 后并解析数据:
@property (nonatomic, strong) NSArray *videos;
- (void)loadVideos{
// 0.请求路径
NSString *urlString = @"http://www.example.com:8080/videos";
NSURL *url = [NSURL URLWithString:urlString];
// 1.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 2.发送请求
__weak typeof(self) weakSelf = self;
[NSURLConnection sendAsynchronousRequest:request
queue:[[NSOperationQueue alloc] init]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError == nil) {
// 3.服务器数据解析 JSON string --> OC dictionary obj
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:nil];
[dict writeToFile:@"/Users/zhaoyingxin/Desktop/zhaoyingxin_videos.plist" atomically:YES];
weakSelf.videos = dict[@"videos"]; // 获得视频数组
// 4. 回到主线程 刷新表格UI
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[weakSelf.tableView reloadData];
}];
}
}];
}
UITableViewDataSource 方法:
#pragma mark - UITableView 数据源方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.videos.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *urlString = @"http://www.example.com:8080";
static NSString *ID = @"video";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
// 对应使用字典数据部分
NSDictionary *video = self.videos[indexPath.row];
cell.textLabel.text = video[@"name"];
cell.detailTextLabel.text = [NSString stringWithFormat:@"时长:%@", video[@"length"]];
NSString *imageString = [urlString stringByAppendingPathComponent:video[@"image"]];
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:imageString]
placeholderImage:[UIImage imageNamed:@"placeholder"]];
return cell;
}
可以使用苹果系统控件播放视频:
#pragma mark - UITableView 代理方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSDictionary *video = self.videos[indexPath.row];
NSString *urlStr = [@"http://www.example.com:8080" stringByAppendingPathComponent:video[@"url"]];
// 创建视频播放器
MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:urlStr]];
// 显示视频
[self presentViewController:vc animated:YES completion:nil];
}