由于后台的变态,有时候会出现两层甚至多层嵌套的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读出来。这类似一个二维数组的变通实现方法。存,存的是一个二维的数组;读,读的也是一个二维数组。