检索数据并将JSON记录保存在数组中

时间:2015-01-19 03:17:10

标签: ios objective-c json afnetworking

我需要在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数组中的所有地址。我该如何解决这个问题?

3 个答案:

答案 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 DataSourcedelegate方法

-(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中有单个部分。希望这有助于.. :))