You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多维JSON填充TableView多组多行遇异常,咨询是否拆分JSON响应

解决TableView填充多维JSON的问题

嘿,我来帮你捋捋这个问题~首先你遇到的arrJSON.count为1的情况,大概率是解析JSON时没拿到正确的层级,而不是需要拆成两个独立的JSON响应。先别急着拆分请求,咱们先把核心问题解决掉:

为什么count是1?

你说预期是3,但实际count为1,十有八九是你的JSON结构最外层是一个字典,而你直接把整个字典塞进了NSArray里,或者你取错了层级。举个典型的适配TableView组和行的多维JSON结构例子:

{
  "sections": [
    {"sectionTitle": "第一组", "rows": [{"rowText": "行1"}, {"rowText": "行2"}]},
    {"sectionTitle": "第二组", "rows": [{"rowText": "行3"}]},
    {"sectionTitle": "第三组", "rows": [{"rowText": "行4"}, {"rowText": "行5"}]}
  ]
}

这个结构里,最外层是一个字典,真正对应TableView组的是sections字段下的数组——如果你直接把整个JSON转成的字典放进NSArray,那这个数组自然只有1个元素(就是那个大字典)。正确的做法是先取出sections对应的数组,这时候它的count就是你预期的3。

要不要拆成两个JSON响应?

完全没必要!组和行是强关联的结构,分开请求反而会带来额外的麻烦:比如要处理两次网络请求的时序问题(得等两个请求都完成才能刷新TableView),还可能出现数据不一致的情况。一个结构清晰的多维JSON反而更便于维护,也能减少网络请求次数。

正确的处理步骤(Objective-C示例)

  1. 正确解析JSON层级:
// 假设你已经获取到网络请求返回的data
NSError *error = nil;
NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
if (!error) {
    // 取出对应组的数组,这就是你要用来填充TableView组的数据源
    self.sectionsArray = responseDict[@"sections"];
    // 此时self.sectionsArray.count应该就是3了
    [self.tableView reloadData];
}
  1. 实现TableView数据源方法:
// 返回组的数量
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return self.sectionsArray.count;
}

// 返回每组的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSDictionary *sectionInfo = self.sectionsArray[section];
    return sectionInfo[@"rows"].count;
}

// 填充每个cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YourCellID" forIndexPath:indexPath];
    
    NSDictionary *sectionInfo = self.sectionsArray[indexPath.section];
    NSArray *rowsArray = sectionInfo[@"rows"];
    NSDictionary *rowInfo = rowsArray[indexPath.row];
    
    // 假设你的cell要显示rowText字段
    cell.textLabel.text = rowInfo[@"rowText"];
    return cell;
}

额外检查点

如果你的JSON最外层本身就是数组(比如直接是[{"sectionTitle":"...", "rows":[]}, ...]),但count还是1,那要检查NSJSONSerialization的调用是否正确——比如是不是不小心把JSON字符串当成元素放进了数组,而不是正确解析成数组。

总的来说,不用拆分JSON请求,只要找准JSON的层级,正确解析出组和行对应的数组,就能顺利填充TableView啦~

内容的提问来源于stack exchange,提问作者Peter Burgundy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:42:12