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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:37