0.简介
1.什么是JSON
1) JSON是一种轻量级的数据格式,一般用于数据交互
2) 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)
2.相关说明
1) JSON的格式很像OC中的字典和数组
2) 标准JSON格式key必须是双引号
3.JSON解析方案
1)第三方框架 JSONKit/SBJSON/TouchJSON
2)苹果原生 NSJSONSerialization(常用)
1.Json --> OC(反序列化)
/*
第一个参数:要解析的二进制数据(json)
第二个参数:
NSJSONReadingMutableContainers = (1UL << 0), 表示时一个可变的数组或者是字典
NSJSONReadingMutableLeaves = (1UL << 1), 字符串也是可变 iOS7有问题
NSJSONReadingAllowFragments = (1UL << 2) 既不是数组也不是字典,必须使用该枚举值
第三个参数:错误信息
*/
NSError *error = nil;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
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对象进行排版,无意义
*/
if ([NSJSONSerialization isValidJSONObject:array]) {
NSError *error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:&error];
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}else {
NSLog(@"不能转换");
}
3.查看JSON数据
方法一:
把解析后的数据写plist文件,通过plist文件可以直观的查看JSON的层次结构。
[dictM writeToFile:@"/Users/LongLJ/Desktop/xiao.plist" atomically:YES];
方法二:
在线格式化http://tool.oschina.net/codeformat/json
4.视频的简单播放
//0.需要导入系统框架
#import <MediaPlayer/MediaPlayer.h>
//1.拿到该cell对应的数据字典
LJVideo *video = self.videos[indexPath.row];
NSString *videoStr = [@"http://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];
0.简介
1.语法
2.XML文档的三部分(声明/元素和属性)
3.其它注意点(注意不能交叉包含/空行换行/XML文档只能有一个根元素等)
1. 解析的两种方式
SAX:从根元素开始,按顺序一个元素一个元素的往下解析,可用于解析大/小文件
DOM:一次性将整个XML文档加载到内存中,适合较小的文件
2. 解析XML的工具
苹果原生NSXMLParser:使用SAX方式解析,简单
第三方框架:libxml2:纯c语言,默认在ios中,同时支持DOM和SAX方式解析
GDataXML:使用DOM方式解析,由Goole开发,基于xml2
1.XML解析(NSXMLParser) --- 利用代理方法
// 解析步骤
// 1.创建一个解析器
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
// 2.设置代理
parser.delegate = self;
// 3.开始解析
[parser parse];
// 代理方法
// 1.当开始解析XML文件的时候调用
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
}
// 2.开始解析某个元素的时候调用,调用多次
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
NSLog(@"didStartElement:%@--%@",elementName,attributeDict);
[self.videoItems addObject:[LJVideoItem mj_objectWithKeyValues:attributeDict]];
}
// 3.结束解析某个元素的时候调用 调用多次
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
}
// 4.当结束解析XML文件的时候调用
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
}
- (NSString *)descriptionWithLocale:(id) locale
方法原文:http://www.cnblogs.com/LongLJ/p/5084340.html