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
相关产品推荐
相关产品推荐

