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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:10