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

如何在Alamofire中获取jsonSerializationFailed错误的Code值并处理?

解决Alamofire中Code=3840的JSON序列化错误捕获问题

这个错误是因为服务器返回的内容无法被解析为合法JSON,而3840是底层NSCocoaErrorDomain的错误码,它被嵌套在Alamofire的AFError结构里,所以需要逐层拆解错误才能精准捕获。下面给你两种实用的实现方式:

方式一:完整分支匹配(适合需要处理多种错误场景)

这种方式清晰展示了错误的层级结构,方便你后续扩展处理其他类型的Alamofire错误:

AF.request("你的接口地址").responseJSON { response in
    switch response.result {
    case .success(let data):
        // 处理成功返回的数据
        print("请求成功:\(data)")
    case .failure(let error):
        // 先把错误转为AFError类型
        guard let afError = error as? AFError else {
            print("非Alamofire错误:\(error)")
            return
        }
        
        // 匹配序列化失败的错误
        switch afError {
        case .responseSerializationFailed(let failureReason):
            // 匹配JSON序列化失败的子原因
            switch failureReason {
            case .jsonSerializationFailed(let underlyingError):
                // 检查底层错误的code是否为3840
                if underlyingError.code == 3840 {
                    // 这里添加你的提示逻辑,比如弹出Toast或Alert
                    print("提示:数据格式错误,请稍后重试")
                }
            default:
                print("其他序列化失败错误:\(failureReason)")
            }
        default:
            print("其他Alamofire错误:\(afError)")
        }
    }
}

方式二:简洁的模式匹配(适合只关注3840错误场景)

如果你的业务只需要处理这个特定错误,可以用if case的模式匹配简化代码,让逻辑更聚焦:

AF.request("你的接口地址").responseJSON { response in
    switch response.result {
    case .success(let data):
        // 处理成功逻辑
        print(data)
    case .failure(let error):
        // 直接匹配嵌套的错误结构
        if case .responseSerializationFailed(.jsonSerializationFailed(let underlyingError)) = error as? AFError,
           underlyingError.code == 3840 {
            // 展示提示信息
            print("数据解析失败,请检查服务器返回内容或稍后重试")
        }
    }
}

补充说明

出现这个错误的常见原因是服务器返回了非JSON格式的内容(比如纯文本"true"、HTML页面、或者格式不合法的JSON),捕获到这个错误后,你可以根据业务需求给用户友好的提示,比如“网络请求失败,请稍后再试”或者更具体的“数据格式异常”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:29:55