由于后台的变态,有时候会出现两层甚至多层嵌套的JSON包。
一层的很好解,而且我看过一些比较大的网站新闻接口返回的JSON包也仅仅是一层的。
比如下图所示一层的包
代码也很简单直观
dict = [data objectFromJSONData]; // 这里可能会转换失败,还需要接着做判断 _dinnArray = [[NSMutableArray alloc] init];
_dataArray = [dict objectForKey:@"data"];
for (NSDictionary *DinnDict in _dataArray) {
Service *servic = [[Service alloc]init];
servic.name = [DinnDict objectForKey:@"names"];
servic.time = [DinnDict objectForKey:@"server_time"];
servic.tel = [DinnDict objectForKey:@“tel”];
[_dinnArray addObject:servic];
}
读取_dinnArray的时候也很简单
Service *service = [_dinnArray objectAtIndex:indexPath.row];
两层的嵌套,看了很多网上的帖子,都会出错。
针对如下图所示的包
代码今天暂时就不强调重点了。先贴在下面
dict = [data objectFromJSONData];
_dataArray= [[dict objectForKey:@"data"]retain];
for (NSDictionary*ScourDict in _dataArray) {
_listArray=[ScourDict objectForKey:@"tel_list"];
NSMutableArray*scourArray=[[NSMutableArray alloc]init];
//NSLog(@"scoreArray remove %@",scourArray);
for (NSDictionary*listDict in _listArray) {
//NSLog(@"listDict %@",listDict);
//NSLog(@"listDict count %d",[listDict count]);
Address*address=[[Address alloc]init];
address.namelist=[listDict objectForKey:@"name_contacts"];
address.phone=[listDict objectForKey:@"phone_number"];
[scourArray addObject:address];
}
[_fourArray addObject:scourArray];
}
读取数组部分
_adressArray=[_fourArray objectAtIndex:indexPath.section];
Address*address=[_adressArray objectAtIndex:indexPath.row];
重点是,在存的部分,scourArray必须为局部变量,不然只能存储上最后一组数据,前面的都会被覆盖掉。
另外,读的部分,要套两层才能把Array读出来。这类似一个二维数组的变通实现方法。存,存的是一个二维的数组;读,读的也是一个二维数组。