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

使用SwiftyJson解析JSON失败,报Thread 1: signal SIGABRT错误求助

问题原因

崩溃的核心原因是返回的JSON顶层结构是单个字典({}),但你的代码强行将response.value强制转换为字典数组([[String : Any]]),强制解包(as!)失败直接触发SIGABRT崩溃。

看你提供的JSON响应,顶层是包含id、choices等字段的对象,不是数组,所以response.value实际类型是[String: Any],而非[[String: Any]]。

修复方案

方案1:修正原生类型转换(不依赖SwiftyJSON)

将类型转换改为字典类型,同时用安全转换替代强制解包:

AF.request(...).responseJSON { response in
    print("response: \(response)")
    
    switch response.result {
    case .success(let value):
        // 转换为单个字典而非数组
        if let jsonDict = value as? [String: Any] {
            print("JSON: \(jsonDict)")
            // 获取choices数组
            if let choices = jsonDict["choices"] as? [[String: Any]] {
                print("choices: \(choices)")
                // 取第一个choice的text字段
                if let firstChoice = choices.first, let jobText = firstChoice["text"] as? String {
                    print("职位列表:\n\(jobText)")
                }
            }
        }
        break
        
    case .failure(let error):
        print("错误信息: \(error.localizedDescription)")
        break
    }
}

方案2:用SwiftyJSON简化解析(推荐)

既然已经引入SwiftyJSON,直接用它处理可避免大量手动类型判断:

AF.request(...).responseJSON { response in
    print("response: \(response)")
    
    switch response.result {
    case .success(let value):
        let json = JSON(value)
        // 直接获取choices数组,arrayValue会自动处理空值
        let choices = json["choices"].arrayValue
        // 取第一个choice的text字段,stringValue返回空字符串避免崩溃
        let jobListText = choices.first?["text"].stringValue ?? ""
        print("职位列表:\n\(jobListText)")
        break
        
    case .failure(let error):
        print("错误信息: \(error.localizedDescription)")
        break
    }
}
关键注意事项
  • 永远避免用as!做类型转换,强制解包会在类型不匹配时直接崩溃,改用as?做安全转换。
  • 先确认接口返回的JSON结构(对象/数组),再对应选择转换类型。
  • SwiftyJSON的arrayValue、stringValue等方法会自动处理可选值,返回默认空值,避免空指针问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:25:16