解析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;
}

 
 
原文地址:https://www.cnblogs.com/wangshengl9263/p/3052187.html