解析 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 解析:从 NSDictionary 检索数据并将其存储在数组中
React Native - 如何解析 json 数据并将其设置在状态对象中