Swift中如何将JSONObject转为字符串?JSON数组转数组填充TableView遇错求助
嘿,我来帮你解决这两个问题,先从JSON数组解析填充TableView说起,再讲JSONObject转字符串的方法~
一、解析JSON数组并填充TableView
你解析时出错大概率是类型转换不匹配或者API返回的JSON格式和你预期不符,我给你两种常用的解析方案,优先推荐用现代的Codable(类型安全,代码更简洁):
方案1:用Codable解析(推荐)
首先定义对应JSON结构的模型:
// 假设API返回的数组元素是包含id和name的对象,你可以根据实际字段调整 struct TableItem: Codable { let id: Int let name: String // 添加你需要的其他字段 }
然后在接收API数据后解析:
// 假设你从API获取到了data数据 do { // 直接解析成[TableItem]类型的数组 let items = try JSONDecoder().decode([TableItem].self, from: data) // 将解析后的数组赋值给TableView的数据源 self.tableDataSource = items // 回到主线程刷新TableView DispatchQueue.main.async { self.tableView.reloadData() } } catch { // 打印错误信息排查问题 print("JSON解析失败:\(error.localizedDescription)") // 可以打印更详细的错误详情,方便定位字段不匹配的问题 print("具体错误:\(error)") }
方案2:用JSONSerialization解析(旧方法)
如果暂时不想用Codable,也可以用传统的JSONSerialization:
do { // 先把Data转成JSON对象,再强制转成二维字典数组 guard let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] else { print("API返回的不是JSON数组格式") return } // 这里jsonArray就是你要的数组,可以直接作为TableView数据源 self.tableDataSource = jsonArray DispatchQueue.main.async { self.tableView.reloadData() } } catch { print("解析出错:\(error)") }
⚠️ 排查小技巧:如果一直解析失败,先把API返回的Data转成字符串看看真实内容,确认格式是否正确:
if let rawJsonString = String(data: data, encoding: .utf8) { print("API返回原始内容:\(rawJsonString)") }
二、Swift中将JSONObject转换为字符串的方法
这里分两种场景,对应不同的实现方式:
场景1:将字典/数组类型的JSONObject转成字符串
用JSONSerialization把JSON对象转成Data,再转成字符串:
func convertJSONObjectToString(_ jsonObject: Any) -> String? { do { // .prettyPrinted会让输出的字符串有缩进,可读性更强;如果要紧凑格式可以用[] let jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) return String(data: jsonData, encoding: .utf8) } catch { print("转换失败:\(error)") return nil } } // 使用示例 let sampleDict: [String: Any] = ["username": "Jim", "age": 30] if let jsonString = convertJSONObjectToString(sampleDict) { print(jsonString) }
场景2:将Codable模型对象转成JSON字符串
如果你的数据是Codable模型,直接用JSONEncoder:
func convertModelToJSONString<T: Codable>(_ model: T) -> String? { do { let jsonData = try JSONEncoder().encode(model) return String(data: jsonData, encoding: .utf8) } catch { print("模型转JSON失败:\(error)") return nil } } // 使用示例 let testItem = TableItem(id: 1, name: "测试数据") if let jsonString = convertModelToJSONString(testItem) { print(jsonString) }
内容的提问来源于stack exchange,提问作者Jim C.
相关产品推荐
相关产品推荐

