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

Swift中无法解析响应字符串:JSON格式错误问题

问题分析与解决:JSON解析格式错误

你提到用Postman能正常获取响应,数据也成功存入数据库,但用JSONSerialization解析响应数据时碰到了这个错误:

The data couldn’t be read because it isn’t in the correct format

问题出在你的解析逻辑上!你把JSONSerialization.jsonObject(with:...)的结果直接强制转成String了,这完全搞错了JSON解析的规则。JSONSerialization.jsonObject方法返回的是Any类型,实际解析后对应的是字典[String: Any]或者数组[Any],根本不是字符串类型,强行转换自然会触发格式错误。

试试改成下面的代码:

do {
    // 先解析JSON数据,得到Any类型的结果
    let jsonResult = try JSONSerialization.jsonObject(with: data, options: [])
    
    // 根据实际响应结构判断是字典还是数组
    if let responseDict = jsonResult as? [String: Any] {
        print(responseDict)
        // 这里处理字典格式的响应数据
        OperationQueue.main.addOperation {
            self.progressHUD.hide()
        }
    } else if let responseArray = jsonResult as? [Any] {
        print(responseArray)
        // 如果响应是数组结构,在这里处理
        OperationQueue.main.addOperation {
            self.progressHUD.hide()
        }
    }
} catch {
    // 捕获解析异常,方便排查问题
    print("JSON解析失败:\(error.localizedDescription)")
    OperationQueue.main.addOperation {
        self.progressHUD.hide()
    }
}

另外补充两点小提示:

  • .mutableContainers这个选项在Swift中没有实际作用,因为Swift的集合都是值类型,直接传空选项数组[]就行;
  • 一定要加上do-catch块捕获异常,这样能更清楚地看到解析失败的具体原因,而不是只收到模糊的格式错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:06:00