本节学习内容:
1.json 数据的定义
2.json 数据的解析方法
3.json数据解析实践
SBJsonParser: JSON数据解析类
objectWithString:jsonString:解析字符串数据
NSJSONSerialization: ios JSON解析类
JSONObjectWithData:通过二进制解析数据
导入DouBan.json文件
【ViewController.h】
#import<UIKit/UIKit.h>
@interface ViewController:UIViewController
//数据视图代理协议
<UITableViewDataSource,UITablViewDalegate>{
//数据视图定议
UITableView* _tableView;
NSMutableArray* _arrayBooks;
}
@end
【viewController.m】
#import"viewController.h"
#import"BookModel.h"
@interface ViewController()
@end
@implementation ViewController
-(void)viewDidLoad{
[super viewDidLoad];
//创建数据视图
_tableView=[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrounped];
_tableView.delegate=self;
_tableView.dataSource=self;
[self.view addSubview:_tableView];
//获取组数
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
returen 1;
}
//获取每组的行数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return _arrayBooks.count;
}
-(UITableViewCell*)tableView:(UITableView *)tableView celllForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString* strID=@"ID";
UITableViewCell* cell=[_tableView dequeueReusableCellWithIdentifier:strId];
if(cell == nil){
//创建数据源单元格对象
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:strID];
}
//获取对应的图书数据
BookMode* book=[_arrayBooks objectAtIndex:indexPath.row];
//将数名赋值给文本label
cell.textLable.text=book.mBookName;
cell.detailTextLabel.text=book.mPrice;
return cell;
}
//解析数据
-(void)parseData{
//获取json文件本地路径
NSString* path=[[NSBundle mainBundle]pathForResource:@"DouBan" ofType:@"json"];
//加载json文件为二进制文件
NSData* data=[NSData dataWithContentsOfFile:path];
//字典对象解析,将json数据解析为字典格式
NSDictionary* dicRoot=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//判断解析是否为字典
if([dicRoot isKingOfClass:[NSDictionar class]]){
//开始解析数据
_arrayBooks=[[NSMutableArray alloc]init];
//解析根数据
NSArray* arrayEnter=[dicRoot objectForKey:@"entry"];
//遍历数组对象
for(init i=0;i<arrayEnter.count;i++){
NSDictionary* dicBook=[arrayEnter objectAtIndex:i];
//获取书籍名字对象
NSDictionary* bookNmeDic=[dicRoot objectForKey:@"title"];
NSString* bookName=[bookNameDic bojectForKey:@"$t"];
BookModel* book=[[BookModel alloc]init];
book.mBookName=bookName;
//数组对象
NSArray* arrAttr=[dicBook objectForKey:@"db:attribute"];
for(int i=0;i<arrAttr.count;i++){
NSDictionary* dic=[arrAttr objectAtIndex:i];
NSString* strNAme=[dic objectForKey:@"@name"];
if([strName isEqualToString:@"price")]==YES){
NSString* price=[dic objectForKey:@"st"];
book.mPrice=price;
}else if(([strName isEqualToString:@"publisher"]==YES){
book.mPublisher=pub;
}
}
//添加到数组中
[_arrayBooks addObject:book];
}
}
//更新数据视图数据
[_tableView reloadData]
}
【BookModel.h】
#import<Foundation/Foundation>
//书籍的数据模型
@interface BookMode:NSObject{
//书籍名称
NSString* _bookName;
//出版社名称
NSString* _publisher;
//书籍价格
NSString* _price;
//作者数组
NSMutableArray* _authorArray;
}
@property(retain,nonatomic) NSString* mBookName;
@property(retain,nonatomic) NSString* mPublisher;
@property(retain,nonatomic) NSString* mPrice;
@property(retain,nonatomic) NSString* mAuthorArray;
@end
【BookModel.m】
#import "BookModel.h"
@implementation BookModel
@syntesize mBookName=_bookName;
@syntesize mAuthorArray=_mAuthorArray;
@syntesize mPrice=_mPrice;
@syntesize mPublisher=_mPublisher;
@end;