解析 JSON 并将其显示在 UITableView 上的问题

Posted

技术标签:

【中文标题】解析 JSON 并将其显示在 UITableView 上的问题【英文标题】:Trouble on parsing JSON and displaying it on UITableView 【发布时间】:2011-12-17 19:06:37 【问题描述】:

我有这个网址:http://maps.google.com.br/maps/api/directions/json?origin=porto+alegre&destination=novo+hamburgo&sensor=false

还有这段代码:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
[connection release];

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];

NSMutableDictionary *theDictionary = [responseString JSONValue];

NSLog(@"%@", theDictionary);

[responseString release];
if (theDictionary != nil) 

    NSArray *routesArray = [theDictionary objectForKey:@"routes"];
    NSDictionary *firstRoute = [routesArray objectAtIndex:0];
    NSArray *legsArray = [firstRoute objectForKey:@"legs"];
    NSDictionary *firstLeg = [legsArray objectAtIndex:0];
    steps = [firstLeg objectForKey:@"steps"];


[tableView reloadData];

我想在 uitableview 上显示每一个 @"html_instructions"。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
// Return the number of rows in the section.
return [self.steps count];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cachedCell"];

if (cell == nil)
    cell = [[[UITableViewCell alloc] 
             initWithFrame:CGRectZero reuseIdentifier:@"cachedCell"] autorelease];

return cell;

我的代码中缺少什么???应该是一些小细节......任何帮助都会很棒!

【问题讨论】:

steps 是一个 NSMutableArray?正在获取 JSON 数据吗?请解释清楚。 是的。 'steps' 是 nsmutablearray 并且 json 解析良好(nslog)。 @Emon 【参考方案1】:

我会这样做: 使用您的 url 创建 url 请求

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
        [request setURL:[NSURL URLWithString:@"http://maps.google.com.br/maps/api/directions/json?origin=porto+alegre&destination=novo+hamburgo&sensor=false"]];

然后创建 NSData 结构,它保存对请求的响应,并将其转换为字符串

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; //Or async request
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

之后,您将 JSON 加载到 Dictionary 中,然后向下移动一级,将其传递给另一个字典(结果 1)

NSError *error=nil;
    result = [NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error];
    result1 = [result objectForKey:@"routes"];
    result2 = [result1 objectForKey:@"legs"];

然后将其移入 NSMutableArray

jsonMutArray= [result2 objectForKey:@"steps"];

从那里,您只需将标签放入自定义单元格中,将其作为 IBOutlet 附加,合成并在 cellForRowAtIndexPath 方法中执行

cell.yourLabel.text = [jsonMutArray objectForKey:@"html_instructions"];

但是,请记住,我只是初学者,所以这可能不是最有效的方法 :) 祝你好运!

【讨论】:

【参考方案2】:

你不需要在你的 CellForRowAtIndexPath 中做这样的事情吗?

NSString *cellValue = **WHATEVER VALUE YOU WANT TO PUT IN**;

cell.textLabel.text = cellValue;

return cell;

我没有看到您将数据添加到单元格中。

【讨论】:

以上是关于解析 JSON 并将其显示在 UITableView 上的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从函数内部获取 JSON 数据并将其快速显示在文本字段上?

解析嵌套的 json 并将其保存在 csv 中

JSON 解析:从 NSDictionary 检索数据并将其存储在数组中

React Native - 如何解析 json 数据并将其设置在状态对象中

使用 Dart 语言解析嵌套 JSON 数组并将其放入模型类中

通过React Native显示JSON数据-json数组