Swift iOS解析JSON:筛选非Static状态数据并展示在TableView
解决方法:筛选非Static状态的JSON数据并展示在TableView
嘿,我来帮你搞定这个需求!要筛选出status.name不等于static的数据并展示在TableView里,咱们可以分成两步来做:解析过滤JSON,再把数据绑定到TableView上。
第一步:解析JSON并过滤目标数据
首先你得把Postman返回的JSON数据转换成可操作的数组,然后用过滤方法把符合条件的数据挑出来。假设你用的是Swift,下面是示例代码:
// 假设你已经获取到了JSON数据(比如从网络请求得到的Data对象) do { // 将JSON数据转成字典数组 guard let jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String: Any]] else { print("JSON解析失败") return } // 过滤出status.name不等于"static"的数据 let filteredData = jsonArray.filter { item in // 取出status字典,再获取name字段 guard let statusDict = item["status"] as? [String: String], let statusName = statusDict["name"] else { return false // 如果status字段不合法,默认排除 } // 忽略大小写比较,避免大小写问题 return statusName.lowercased() != "static" } // 现在filteredData就是你要的目标数据,可以用来给TableView做数据源 self.tableViewData = filteredData self.tableView.reloadData() } catch { print("JSON解析出错:\(error.localizedDescription)") }
第二步:绑定数据到TableView
接下来要把过滤后的数组作为TableView的数据源,实现UITableView的两个核心方法:
// 数据源数组,提前定义好 var tableViewData: [[String: Any]] = [] // 返回行数 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tableViewData.count } // 配置Cell内容 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "YourCellIdentifier", for: indexPath) let item = tableViewData[indexPath.row] // 给Cell设置内容,比如显示name字段 cell.textLabel?.text = item["name"] as? String // 还可以设置其他字段,比如reward、sched等 cell.detailTextLabel?.text = "奖励:\(item["reward"] ?? "0.00")" return cell }
小提示
- 建议把JSON数据转成自定义的Model类(比如用Codable协议),这样代码会更清晰,避免大量的字典取值操作。比如定义一个TaskModel:
struct TaskModel: Codable { let id: Int let name: String let reward: String let sched: String let status: StatusModel // 其他字段根据需要添加 } struct StatusModel: Codable { let name: String }
然后解析的时候直接用JSONDecoder转成[TaskModel],过滤的时候更直观:
let filteredTasks = tasks.filter { $0.status.name.lowercased() != "static" }
这样处理后,你的TableView就能完美展示所有非Static状态的数据啦!
内容的提问来源于stack exchange,提问作者user9683424
相关产品推荐
相关产品推荐

