解析Json数据
#pragma mark 解析XML数据
- (NSArray *)parseXMLData:(NSData *)data error:(NSString **)error{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 设置代理
parser.delegate = self;
// 开始解析(阻塞式方法)
[parser parse];
[parser release];
// 说明有错误信息
if (_error) {
*error = _error;
}
return _videos;
}
#pragma mark - XML解析代理的方法
#pragma mark 开始解析XML的时候调用
- (void)parserDidStartDocument:(NSXMLParser *)parser {
//NSLog(@"开始解析XML");
}
#pragma mark 解析到某一个标签的开头就会调用 <videos> <video>
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
//NSLog(@"解析到某一个标签的开头:%@", elementName);
// 如果解析到videos标签
if ([kVideos isEqualToString:elementName]) {
_error = [attributeDict objectForKey:kError];
// 有错误信息
if (_error) {
// 停止解析
[parser abortParsing];
} else {
// 初始化一个数组存放Video对象
_videos = [NSMutableArray array];
}
} else if ([kVideo isEqualToString:elementName]) {
// 如果解析到video标签
Video *video = [Video videoWithDict:attributeDict];
[_videos addObject:video];
}
}
#pragma mark 解析到某一个标签的结尾时就会调用 <videos/> <video/>
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
//NSLog(@"解析到某一个标签的结尾:%@", elementName);
}
#pragma mark 解析完毕的时候调用
- (void)parserDidEndDocument:(NSXMLParser *)parser {
//NSLog(@"解析完毕");
}
/**
*
{"error":"用户名不存在"}
{"error":"密码不正确"}
{"videos":
[
{ "id":1, "name":"第1部", "length":40 },
{ "id":2, "name":"第2部", "length":41 }
]
}
*/
#pragma mark- 解析JSON数据
- (NSArray *)parseJSONData:(NSData *)data error:(NSString **)error {
NSMutableArray *videos = nil;
NSDictionary *dict = [data JSONValue];
NSString *myerror = [dict objectForKey:kError];
// 有错误信息
if (myerror) {
*error = myerror;
} else {
NSArray *array = [dict objectForKey:kVideos];
videos = [NSMutableArray array];
for (NSDictionary *obj in array) {
Video *v = [Video videoWithDict:obj];
[videos addObject:v];
}
}
return videos;
}