iOS之JSON解析和视频的简单播放
JSON解析
1 JSON简单介绍
1)什么是JSON
(1)JSON是⼀种轻量级的数据格式,⼀般⽤于数据交互
(2)服务器返回给客户端的数据,⼀般都是JSON格式或者XML格式(⽂件下载除外)
2)相关说明
(1)JSON的格式很像OC中的字典和数组
(2)标准JSON格式key必须是双引号
3)JSON解析⽅案
a.第三⽅框架  JSONKit\SBJSON\TouchJSON
b.苹果原⽣(NSJSONSerialization)(原⽣的最常⽤,也是推荐⽤的)
2 JSON解析相关代码
1)json数据->OC对象(        //把json数据转换为OC对象
-(void)jsonToOC
{
//1. 确定url路径
NSURL *url = [NSURL URLWithString:@"120.25.226.186:32812/login?username=33&pwd=33&type=JSON"];
//2.创建⼀个请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//3.使⽤NSURLSession发送⼀个异步请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {                //4.当接收到服务器响应的数据后,解析数据(JSON--->OC)
/*
第⼀个参数:要解析的JSON数据,是NSData类型也就是⼆进制数据
第⼆个参数: 解析JSON的可选配置参数
NSJSONReadingMutableContainers 解析出来的字典和数组是可变的
NSJSONReadingMutableLeaves 解析出来的对象中的字符串是可变的  iOS7以后有问题ios 字符串转数组
NSJSONReadingAllowFragments 被解析的JSON数据如果既不是字典也不是数组, 那么就必须使⽤这个
*/
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"%@",dict);
}];
}
2)OC对象->JSON对象(        //1.要转换成JSON数据的OC对象*这⾥是⼀个字典
NSDictionary *dictM = @{
@"name":@"wendingding",
@"age":@100,
@"height":@1.73
};
//2.OC->JSON
/*
注意:可以通过+ (BOOL)isValidJSONObject:(id)obj;⽅法判断当前OC对象能否转换为JSON数据
具体限制:
1.obj 是NSArray 或 NSDictionay 以及他们派⽣出来的⼦类
2.obj 包含的所有对象是NSString,NSNumber,NSArray,NSDictionary 或NSNull
3.字典中所有的key必须是NSString类型的
4.NSNumber的对象不能是NaN或⽆穷⼤
*/
/*
第⼀个参数:要转换成JSON数据的OC对象,这⾥为⼀个字典
第⼆个参数:NSJSONWritingPrettyPrinted对转换之后的JSON对象进⾏排版,⽆意义
*/
NSData *data = [NSJSONSerialization dataWithJSONObject:dictM options:NSJSONWritingPrettyPrinted error:nil];
//3.打印查看Data是否有值
/*
第⼀个参数:要转换为STring的⼆进制数据
第⼆个参数:编码⽅式,通常采⽤NSUTF8StringEncoding
*/
NSString *strM = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",strM);
3)OC对象和JSON数据格式之间的⼀⼀对应关系
//OC对象和JSON数据之间的⼀⼀对应关系
-(void)oCWithJSON
{
/
/JSON的各种数据格式
//NSString *test = @"\"wendingding\"";
//NSString *test = @"true";
NSString *test = @"{\"name\":\"wendingding\"}";
//把JSON数据->OC对象,以便查看他们之间的⼀⼀对应关系
//注意点:如何被解析的JSON数据如果既不是字典也不是数组(⽐如是NSString), 那么就必须使⽤这NSJSONReadingAllowFragments
id obj = [NSJSONSerialization JSONObjectWithData:[test dataUsingEncoding:NSUTF8StringEncoding]
options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@", [obj class]);
/* JSON数据格式和OC对象的⼀⼀对应关系
{} -> 字典
[] -> 数组
"" -> 字符串
10/10.1 -> NSNumber
true/false -> NSNumber
null -> NSNull
*/
}
}
4)如何查看复杂的JSON数据
⽅法⼀:
⽅法⼆:
把解析后的数据写plist⽂件,通过plist⽂件可以直观的查看JSON的层次结构。
[dictM writeToFile:@"/Users/OnlyChenJ/Desktop/videos.plist" atomically:YES];
5    //0.需要导⼊系统框架
#import <MediaPlayer/MediaPlayer.h>
//1.拿到该cell对应的数据字典
CJVideo *video = self.w];
NSString *videoStr = [@"120.25.226.186:32812" stringByAppendingPathComponent:video.url];
//2.创建⼀个视频播放器
MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc]initWithContentURL:[NSURL URLWithString:videoStr]];    //3.present播放控制器
[self presentViewController:vc animated:YES completion:nil];
3 字典转模型框架
1)相关框架
a.Mantle 需要继承⾃MTModel
b.JSONModel 需要继承⾃JSONModel
c.MJExtension 不需要继承,⽆代码侵⼊性
2)⾃⼰设计和选择框架时需要注意的问题
a.侵⼊性
b.易⽤性,是否容易上⼿
c.扩展性,很容易给这个框架增加新的功能
3)MJExtension框架的简单使⽤
//1.把字典数组转换为模型数组
/
/使⽤MJExtension框架进⾏字典转模型
self.videos = [XMGVideo mj_objectArrayWithKeyValuesArray:videoArray];
//2.重命名模型属性的名称
//第⼀种重命名属性名称的⽅法,有⼀定的代码侵⼊性
//设置字典中的id被模型中的ID替换
+(NSDictionary *)mj_replacedKeyFromPropertyName
{
return @{
@"ID":@"id"
};
}
/
/第⼆种重命名属性名称的⽅法,代码侵⼊性为零
[XMGVideo mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
return @{
@"ID":@"id"
};
}];
//3.MJExtension框架内部实现原理-运⾏时

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。