我需要在address
中显示tableview
。如何中断JSON
并将地址保存在NSArray
。
JSON是:
{
"Rank": 54,
"data": [
{
"number": 1,
"address": "x mandt "
},
{
"number": 2,
"address": "x mandt2 "
}
]
}
COde是:
NSDictionary *dic = (NSDictionary *) responseObject;
NSDictionary * dat = [dic objectForKey:@"data"];
NSArray *add =[dat objectForKey:@"address"];
上述代码不会检索并保存add
数组中的所有地址。我该如何解决这个问题?
答案 0 :(得分:1)
假设这是您的序列化数据
NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:responseData options: NSJSONReadingMutableContainers error: &err];
// here I start your work
NSArray *infoDict=[jsonArray objectForKey:@"data"];
for (NSDictionary *tmp in infoDict)
{
NSMutableDictionary *temparr=[[NSMutableDictionary alloc]init];
[temparr setValue:[tmp objectForKey:@"number"] forKey:@"number"];
[temparr setValue:[tmp objectForKey:@"address"] forKey:@"address"];
[_tdataSource addObject:temparr];
}
[yourtableviewNAme reloadData];
此处我添加了Tableview DataSource
和delegate
方法
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
{
return [self.tdataSource count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"resultCell";
yourtableviewCellName *cell = [self.yourtableName dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[yourtableviewCellName alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
}
cell.textLabel.text=[[self.tdataSource objectAtIndex:indexPath.row]objectForKey:@"address"];
return cell;
}
答案 1 :(得分:1)
我认为你最好只使用文字语法来检索它。你检索的方式很好。你可能只是添加一些内省:
NSDictionary *responseDict = (NSDictionary *) responseObject;
if (responseDict.count) {
NSArray *dataArray = responseDict[@"data"];
if (dataArray.count) {
// do whatever you want
}
}
当你检索关键词 data 时你犯了一个错误,之后会得到一个数组但不是 NSDictionary 。
答案 2 :(得分:0)
应该是:
NSArray *add =[dic objectForKey:@"data"];
然后,如果你想拥有地址(我正在考虑第0和第3个索引中的地址),那么就这样做:
NSString *str = [[add objectAtIndex: 0] objectForKey:@"address"];
修改强>
声明一个类变量,如:
@interface YourClassName (){
NSMutableArray *dataSource;
}
填充dataSource,如:
dataSource =[dic objectForKey:@"data"];
然后在cellForRowAtIndexPath
方法中执行此操作:
cell.textLabel.text = [[dataSource objectAtIndex:indexPath.row] objectForKey:@"address"];
我在考虑你的tableview中有单个部分。希望这有助于.. :))