使用URLSession请求时返回字节大小而非实际JSON内容是什么原因
问题解答
原因说明
你打印的data是Data类型的二进制数据,Swift中Data类型的默认输出规则就是仅展示字节长度,所以你会看到100 bytes这类结果,这和Apple官方文档的描述并不冲突:文档说的「返回服务器实际数据」指的是二进制原始数据,只是你直接打印的方式无法展示数据内容。
修复方案
你需要先把二进制Data转换成可读的UTF8字符串,或者解析为JSON对象后再输出,参考修改后的代码:
import UIKit import PlaygroundSupport PlaygroundPage.current.needsIndefiniteExecution = true let url = URL(string: "http://date.jsontest.com/")! let session = URLSession.shared let task = session.dataTask(with: url) { data, response, error in // 前置校验:避免强制解包崩溃 if let error = error { print("请求错误:\(error)") return } guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode), let validData = data else { print("响应无效或无数据返回") return } // 方式1:转成UTF8字符串输出原始JSON内容 if let rawJson = String(data: validData, encoding: .utf8) { print("原始JSON内容:\n\(rawJson)") } // 方式2:解析为JSON对象后输出 do { let jsonObj = try JSONSerialization.jsonObject(with: validData) print("解析后JSON对象:\n\(jsonObj)") } catch { print("JSON解析失败:\(error)") } } task.resume()
注意:iOS 9及以上版本默认禁止HTTP请求,如果你要在iOS项目(非Playground)中运行上述代码,需要在Info.plist中配置ATS权限允许该HTTP域名的请求。
内容的提问来源于stack exchange,提问作者Soulfire J. Backblaze
相关产品推荐
相关产品推荐

