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

Retrieve Data and save JSON records in an array

我需要在 tableview 中显示 address。我怎样才能打破 JSON 并将地址保存在 NSArray.

JSON 是:

{
    "Rank": 54,
    "data": [
        {
            "number": 1,
            "address": "x mandt "
        },
        {
            "number": 2,
            "address": "x mandt2 "
        }
    ]
}

代码是:

NSDictionary *dic = (NSDictionary *) responseObject;
NSDictionary * dat  = [dic objectForKey:@"data"];
NSArray *add =[dat objectForKey:@"address"];

上面的代码,没有检索并保存add数组中的所有地址。我该如何解决这个问题?

应该是:

NSArray *add =[dic objectForKey:@"data"];

然后如果你想要地址(我正在考虑第 0 个索引中的地址),那么这样做:

NSString *str = [[add objectAtIndex: 0] objectForKey:@"address"];

编辑:

声明一个 class 变量,例如:

@interface YourClassName (){
    NSMutableArray *dataSource;
}

像这样填充数据源:

dataSource =[dic objectForKey:@"data"];

然后在您的 cellForRowAtIndexPath 方法中执行此操作:

            cell.textLabel.text = [[dataSource objectAtIndex:indexPath.row] objectForKey:@"address"];

我认为您的表格视图中只有一个部分。希望这有帮助.. :)

假设这是你的序列化数据

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;
}

我认为你最好只使用文字语法来检索它。你检索的方式就好了。您可能只是添加了一些内省:

NSDictionary *responseDict = (NSDictionary *) responseObject;
if (responseDict.count) {
   NSArray *dataArray  = responseDict[@"data"];
   if (dataArray.count) {
      // do whatever you want
   }
}

你在检索关键字 data 时犯了一个错误,之后你将得到一个数组而不是 NSDictionary