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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:43