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

Swift Playground中JSON解码后无法打印ID问题求助

解决Swift Playground中JSON解码无输出的问题

问题原因及对应解决方案

1. 未执行解码函数

你只定义了loadJson函数,但没有在代码中调用它,导致解码逻辑根本没运行,控制台自然没有输出。

解决方法:在代码末尾添加函数调用,替换成你的JSON文件名(不带.json后缀):

// 调用解码函数
_ = loadJson(filename: "你的JSON文件名")

2. JSON文件内容错误

你提供的JSON文件里包含了Swift代码let json = """和结尾的""",这不是纯JSON格式,会导致解码失败,但Playground的特性可能不会抛出明显错误提示。

解决方法:修改JSON文件,只保留纯JSON结构:

{
 "id": "1",
 "options": [
 {
 "id": "11",
 "options": [
 {
 "id": "111",
 "options": []
 }
 ]
 },
 {
 "id": "2",
 "options": [
 {
 "id": "21",
 "options": []
 },
 {
 "id": "22",
 "options": [
 {
 "id": "221",
 "options": []
 }
 ]
 }
 ]
 }
 ]
}

3. Playground中Bundle.main无法正确定位JSON文件

Playground的资源文件处理逻辑和普通Xcode项目不同,Bundle.main可能找不到你添加的JSON文件。

解决方法:修改loadJson函数,使用Playground兼容的方式读取文件:

func loadJson(filename fileName: String) -> People? {
    // 获取Playground所在目录的URL
    guard let playgroundURL = Bundle.main.resourceURL?.deletingLastPathComponent().deletingLastPathComponent() else {
        print("无法获取Playground路径")
        return nil
    }
    let fileURL = playgroundURL.appendingPathComponent("\(fileName).json")
    
    do {
        let data = try Data(contentsOf: fileURL)
        let decoder = JSONDecoder()
        let jsonData = try decoder.decode(People.self, from: data)
        print(jsonData.id)
        return jsonData
    } catch {
        print("error:\(error)")
        return nil
    }
}

或者更简单的方式:直接把JSON内容内嵌到Playground代码中,彻底避免文件路径问题:

struct People: Codable {
    let id: String
    let options: [People]
}

// 内嵌JSON内容
let jsonString = """
{
 "id": "1",
 "options": [
 {
 "id": "11",
 "options": [
 {
 "id": "111",
 "options": []
 }
 ]
 },
 {
 "id": "2",
 "options": [
 {
 "id": "21",
 "options": []
 },
 {
 "id": "22",
 "options": [
 {
 "id": "221",
 "options": []
 }
 ]
 }
 ]
 }
 ]
}
"""

// 解码逻辑
if let jsonData = jsonString.data(using: .utf8) {
    do {
        let result = try JSONDecoder().decode(People.self, from: jsonData)
        print(result.id)
    } catch {
        print("error:\(error)")
    }
}

验证步骤

  1. 确保JSON文件是纯JSON格式,无Swift代码包裹
  2. 确保调用了解码函数
  3. 选择适合Playground的文件读取方式,或直接内嵌JSON内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:20:22